Как привязать и перечислить DropdownButton в Flutter?
Можно ли привязать выпадающую кнопку к перечислению? Я создал enum и пытаюсь связать его с кодом выпадающего меню ниже. Спасибо за любую помощь в этом.
enum ClassType {
Class-A,
Class-B,
Class-C,
Class-D
}
new DropdownButton<String>(
value: classType,
onChanged: (String newValue) {
setState(() {
viewModel.classType = newValue;
});
},
items: ClassType.map((String classType) {
return new DropdownMenuItem<String>(
value: classType,
child: new Text(classType),
);
}).toList(),
)
1 ответ
Решение
Сначала вам нужно обновить аргумент типа DropdownButton, чтобы ClassType
и не String
, В Dart объявление enum создает новый тип, а не Strings.
new DropdownButton<ClassType>(...);
Далее вам нужно изменить имена перечислений. Перечисление должно быть действительным идентификатором дротика, то есть оно не может содержать символ -
,
enum ClassType {A, B, C, D}
Я также обновил ваш map
Метод, в вашем экземпляре enum нет статического итератора, вы должны перечислить их. Также вам нужно будет преобразовать их в строки вручную, либо вызвав toString
который даст вам "ClassType.A"
, ClassType.B"
или написав собственную функцию для этого.
return new DropdownButton<ClassType>(
value: classType,
onChanged: (ClassType newValue) {
setState(() {
viewModel.classType = newValue;
});
},
items: ClassType.values.map((ClassType classType) {
return new DropdownMenuItem<ClassType>(
value: classType,
child: new Text(classType.toString()));
}).toList();
);