Amm*_*ang 3 dart flutter flutter-layout
如何在flutter的下拉菜单中设置初始值?
在下拉菜单中,我要设置初始值,当前显示的提示值为“选择语言”。我需要显示初始值。就像我的初始值是English一样,它应该是我的下拉菜单中的选定项。
下面是我的代码:
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(),
),
)
Run Code Online (Sandbox Code Playgroud)
我的清单初始化为:
List<Language> listLanguage =
<Language> [new Language("English", "en"),
new Language("French", "fr"),
new Language("Hindi", "hi"),
];
Language selectedLanguage;
Run Code Online (Sandbox Code Playgroud)
为了使下拉菜单能够识别哪些语言相等,您需要实现operator==和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;
}
Run Code Online (Sandbox Code Playgroud)
至少如果你不使用const像
const Language("English", "en"),
Run Code Online (Sandbox Code Playgroud)
或重用以前创建的实例
selectedLanguage = listLanguage[0];
Run Code Online (Sandbox Code Playgroud)
因为没有operator==或const
selectedLanguage = new Language("English", "en");
Run Code Online (Sandbox Code Playgroud)
将指向与Language这些实例完全不同的实例,在这些实例中listLanguage,下拉列表现在已经知道它们应该被识别为相同。
| 归档时间: |
|
| 查看次数: |
4194 次 |
| 最近记录: |