如何在flutter的下拉菜单中设置初始值?

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)

在此处输入图片说明

Gün*_*uer 6

为了使下拉菜单能够识别哪些语言相等,您需要实现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,下拉列表现在已经知道它们应该被识别为相同。