Как привязать и перечислить 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();
);
Другие вопросы по тегам