DropDownButton项目在变量中

时间:2019-09-09 12:22:43

标签: flutter dart

我正在尝试将DropDownButton的可能值存储在变量中。

目标: 按下按钮时,我希望创建一个新的字符串列表,并将其分配为DropdownButton的可能选项。为此,我需要将可能的选择(DropdownMenuItem的列表)存储在变量中。

此代码示例有效:

static String defaultDropDownValue = 'Select your Network';
String dropdownValue = defaultDropDownValue;
[...]
new Flexible(
                  child: DropdownButton(
                    isExpanded: true,
                    value: dropdownValue,
                    onChanged: (String newValue) {
                      setState(() {
                        dropdownValue = newValue;
                      });
                      _checkSsid();
                    },
                    items: <String>[defaultDropDownValue, 'One', 'Two', 'Three', 'Four']
                        .map<DropdownMenuItem<String>>((String value) {
                      return DropdownMenuItem<String>(
                        value: value,
                        child: Text(value),
                      );
                    }).toList(),
                  ),
            ),
[...]

现在,此代码示例不起作用:

static String defaultDropDownValue = 'Select your Network';
String dropdownValue = defaultDropDownValue;
List<DropdownMenuItem> dropdownList = [defaultDropDownValue, 'one', 'two'].map<DropdownMenuItem<String>>((String value) {
    return DropdownMenuItem<String>(
      value: value,
      child: Text(value),
    );
  }).toList();
[...]
new Flexible(
                  child: DropdownButton(
                    isExpanded: true,
                    value: dropdownValue,
                    onChanged: (String newValue) {
                      setState(() {
                        dropdownValue = newValue;
                      });
                      _checkSsid();
                    },
                    items: dropdownList,
                  ),
            ),
[...]

编译器返回以下错误消息:

  

错误:参数类型'Null Function(String)'无法分配给   参数类型“无效函数(动态)”。尝试更改类型   参数,或将参数强制转换为“ void Function(dynamic)”。                       onChanged :(字符串newValue){

我不是很了解消息的含义,也不是消息的原因。

1 个答案:

答案 0 :(得分:1)

由于在第二个示例中没有显式定义数组的类型,

您可以尝试DropdownMenuItem<String>DropdownButton<String>对其进行显式显示。

static String defaultDropDownValue = 'Select your Network';
String dropdownValue = defaultDropDownValue;
List<DropdownMenuItem<String>> dropdownList = [defaultDropDownValue, 'one', 'two'].map<DropdownMenuItem<String>>((String value) {
    return DropdownMenuItem<String>(
      value: value,
      child: Text(value),
    );
  }).toList();
[...]
new Flexible(
                  child: DropdownButton<String>(
                    isExpanded: true,
                    value: dropdownValue,
                    onChanged: (String newValue) {
                      setState(() {
                        dropdownValue = newValue;
                      });
                      _checkSsid();
                    },
                    items: dropdownList,
                  ),
            ),
[...]

引用自以下DropdownButton's Documentation

  

类型T是每个下拉菜单项表示的值的类型。给定菜单中的所有条目都必须表示具有一致类型的值。通常,使用一个枚举。项目中的每个DropdownMenuItem必须使用相同的类型参数进行专门设置​​。