错误代码 嗨,我是 flutter 新手,有一个关于 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],
);
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*d_E 39
我有完全相同的错误,多个下拉列表都来自同一个静态列表,唯一的区别是在我的情况下,它是一个对象列表,而不是字符串。
所以,如果它是一个静态列表,它不可能是空的,列表中没有重复的值,而且你已经确定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;
Run Code Online (Sandbox Code Playgroud)
就是这样。我不必初始化_value1或_value2
小智 24
您收到该异常是因为 _value1 和 _value2 未初始化并向下拉小部件提供空。
你可以这样做:
DropdownButton(
value: _value1.isNotEmpty ? _value1 : null, // guard it with null if empty
items: nameList.map((item) {
return DropdownMenuItem(
value: item,
child: new Text(item),
);
}).toList(),
);
Run Code Online (Sandbox Code Playgroud)
小智 8
你有这个例外是因为错误:
_value1和_value2初始化。_value1和_value2直接从nameList如_value1 = nameList[0];
_value2 = nameList[3];
Run Code Online (Sandbox Code Playgroud)
这是复杂数据类型的重要步骤,但在您的情况下
_value1 = "Name1";
_value2 = "Name4";
Run Code Online (Sandbox Code Playgroud)
就足够了。
完整示例:
String _value1;
String _value2;
final List<String> nameList = <String>[
"Name1",
"Name2",
"Name3",
"Name4",
"Name5",
"Name6",
"Name7",
"Name8"
];
/// initialization is here:
@override
void initState() {
super.initState();
_value1 = nameList[0];
_value2 = nameList[3];
}
@override
Widget build(BuildContext context) {
return 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(),
),
),
],
),
],
);
}
}
Run Code Online (Sandbox Code Playgroud)
我有同样的问题,我解决了。下拉按钮需要项目列表和值。我们定义了items 和selected items,但是item selected 实例不在items 列表中。
你应该试试这个并修复你的逻辑。(value ? s 为用户选择的项目值)
var _value = itemList.isEmpty
? value
: itemList.firstWhere((item) => item.value == value.value);
Run Code Online (Sandbox Code Playgroud)
更多:https : //gist.github.com/VB10/fd560694fec0a38751e798a213408001
小智 5
我的解决方案比其他解决方案更简单。事实上,找到一个与列表中不同的值,是因为我在变量中放入了一个值,该值既不是满的也不是空的,该值是这个(“”)并且它必须Dropdown 值实例为null 。所以,我只是在变量声明中放置了一个值 null 。就像:“String _value;”,瞧,它成功了。
#对不起,这里有英语、巴西语。
| 归档时间: |
|
| 查看次数: |
28594 次 |
| 最近记录: |