错误:检测到零个或两个或两个以上具有相同值I / flutter(18363)的[DropdownMenuItem]:'package:flutter / src / material / dropdown.dart':
问题内容:
错误代码
嗨,我是新手,对于关于dropdownbutton的问题,关于将多个dropdownbutton使用相同的值有疑问。
根据我对错误的理解,这是由于在同一活动中为2个或更多下拉按钮使用了相同的列表。
我如何解决此错误,但仍然可以将列表重新用于2个或更多下拉按钮?
String _value1;
String _value2;
final List<String> nameList = <String>[
"Name1",
"Name2",
"Name3",
"Name4",
"Name5",
"Name6",
"Name7",
"Name8"
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 2.0,
title: Text('Hello'),
),
body: ListView(
children: <Widget>[
Row(
children: <Widget>[
Text('Name: '),
Center(
child: DropdownButton(
value: _value1,
onChanged: (value) {
setState(() {
_value1 = value;
});
},
items: nameList.map(
(item) {
return DropdownMenuItem(
value: item,
child: new Text(item),
);
},
).toList(),
),
),
],
),
Row(
children: <Widget>[
Text('Name: '),
Center(
child: DropdownButton(
value: _value2,
onChanged: (value) {
setState(() {
_value2 = value;
});
},
items: nameList.map(
(item) {
return DropdownMenuItem(
value: item,
child: new Text(item),
);
},
).toList(),
),
),
],
),
],
),
backgroundColor: Colors.grey[200],
);
}
}
问题答案:
我遇到了完全相同的错误,多个Dropdowns都从同一个静态列表中获取数据,唯一的区别是在我的情况下,它是对象列表,而不是字符串列表。
因此,如果它是静态列表,则不可能为空,列表中没有重复的值,并且您已经确定value
不为空?那么剩下的唯一选择item.value
就是与value
就我而言,因为它是一个对象列表,所以我必须覆盖对象类中的operator ==
和hashcode
方法。
bool operator ==(dynamic other) =>
other != null && other is TimeSelection && this.hour == other.hour;
@override
int get hashCode => super.hashCode;
就是这样。我不必初始化_value1
或_value2