我正在尝试将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){
我不是很了解消息的含义,也不是消息的原因。
答案 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必须使用相同的类型参数进行专门设置。