22

是否可以将下拉按钮绑定到枚举?我创建了一个枚举并尝试将其绑定到下拉按钮,请参见下面的代码。感谢您对此的任何帮助。

enum ClassType {
  Class-A,
  Class-B,
  Class-C,
  Class-D
}

DropdownButton<String>(
    value: classType,
    onChanged: (String newValue) {
        setState(() {
            viewModel.classType = newValue;
            });
        },
    items: ClassType.map((String classType) {
        return DropdownMenuItem<String>(
            value: classType,
            child: Text(classType),
        );
   }).toList(),
)
4

1 回答 1

38

首先,您需要将 DropdownButton 类型参数更新为ClassTypeand not String。在 Dart 中,枚举声明创建一个新类型,而不是字符串。

下拉按钮(...);

接下来,您需要更改枚举名称。枚举必须是有效的飞镖标识符,这意味着它不能包含符号-

enum ClassType {A, B, C, D}

我还更新了您的map方法,您的枚举实例上没有静态迭代器,您必须将它们列出。此外,您需要手动将它们转换为字符串,方法是调用toStringwhich will give you "ClassType.A"ClassType.B"或者编写您自己的函数来执行此操作。

return DropdownButton<ClassType>(
    value: classType,
    onChanged: (ClassType newValue) {
      setState(() {
        viewModel.classType = newValue;
      });
    },
    items: ClassType.values.map((ClassType classType) {
      return DropdownMenuItem<ClassType>(
        value: classType,
        child: Text(classType.toString()));
    }).toList();
);
于 2018-04-23T02:37:50.393 回答