dart - 如何在颤动中将初始值设置为下拉菜单?
问题描述
如何在颤动中将初始值设置为下拉菜单?
在下拉菜单中我想设置初始值,目前它的显示提示值“选择语言”。我需要在那里显示初始值。就像我的初始值是英语一样,那应该是我的下拉菜单中的选定项。
下面是我的代码:
new DropdownButtonHideUnderline(
child: new DropdownButton<Language>(
hint: new Text("Select Language"),
value: selectedLanguage,
onChanged: (Language newValue) {
applic.onLocaleChanged(new Locale(newValue.languageCode,''));
setState(() {
selectedLanguage = newValue;
});
},
items: listLanguage.map((Language language) {
return new DropdownMenuItem<Language>(
value: language,
child: new Text(
language.languageName ,
style: new TextStyle(color: Colors.black),
),
);
}).toList(),
),
)
我的列表初始化为:
List<Language> listLanguage =
<Language> [new Language("English", "en"),
new Language("French", "fr"),
new Language("Hindi", "hi"),
];
Language selectedLanguage;
解决方案
为了使下拉列表能够识别哪些语言是相同的,您需要实现operator==
and hashCode
:
class Language {
final String code;
final String name;
const Language(this.name, this.code);
int get hashCode => code.hashCode;
bool operator==(Object other) => other is Language && other.code == code;
}
至少如果你不使用const
like
const Language("English", "en"),
或重用以前创建的实例
selectedLanguage = listLanguage[0];
因为没有operator==
或const
selectedLanguage = new Language("English", "en");
将指向一个完全不同的Language
实例,因为listLanguage
下拉列表现在知道它们应该被识别为相同的。
推荐阅读
- android - UninitializedPropertyAccessException:lateinit 属性设置活动尚未初始化
- android - Nativescript-Vue 和 Axios 工作功能导致“错误:请求失败,状态码 429”
- azure-active-directory - Can I query Azure Active Directory (group membership, etc.) from Power BI?
- python - Twitter API 搜索未返回推文的全文
- java - 嵌套异常是 java.lang.NoClassDefFoundError: org.springframework.boot.env.PropertySourcesLoader
- flutter - 居中并调整 FAB 大小
- svn - 如何在不更改修订号的情况下加载部分存储库转储
- sql - 在 SQL 开发人员中将日期时间格式转换为 sysdate 格式
- azure - 在 Azure Logic App 的结果视图中获取“无法获取”
- c - 如何在 C 编程中将数据保存在 .txt 文件中