tom*_*fic 3 asynchronous widget dart dropdown flutter
我正在开发一个dropdownbutton由 Flutter 组成的小部件。该小部件dropdownmenuitems在向用户传入的 URL 发出请求后创建。
我已经看到正在进行的调用并且响应有效,但是当我用于setState更新下拉列表的数据源时,出现以下错误:
'package:flutter/src/material/dropdown.dart': 断言失败: 第 560 行 pos 15: 'items == null || 我/颤振(11514):items.isEmpty || 值==空|| items.where((DropdownMenuItem item) => item.value == I/flutter (11514): value).length == 1': 不正确。
我尝试研究这个错误,但没有找到有用的答案。代码如下:
class _MyWidgetState extends State<MyWidget> {
List<DropdownMenuItem<String>> _data = [];
String _selected = '';
@override
void initState() {
super.initState();
_loadData();
}
void _loadData() async {
if (widget.urlToFetchData.isNotEmpty) {
var response = await http.get(widget.urlToFetchData);
if (response.statusCode == 200) {
Map<String, dynamic> jsonResponse = convert.jsonDecode(response.body);
jsonResponse.forEach((key, value){
setState(() {
this._data.add(new DropdownMenuItem(
child: new Text(value.toString()),
value: value.toString(),
));
});
});
} else {
print("Request failed with status: ${response.statusCode}.");
}
}
}
}
@override
Widget build(BuildContext context) {
if (_data.length == 0) {
return new Container();
} else {
return Column(
children: <Widget> [
new Text(
widget.dropdownLabelTitle
),
DropdownButton(
value: _selected,
items: _data,
hint: new Text(widget.defaultOptionText),
onChanged: (value) {
_selected = value;
widget.valueReturned(_selected);
setState(() {
});
}
)
],
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我完全知道在小部件初始化时,下拉按钮中的项目字段是用空列表初始化的,但我认为通过在 http 调用完成时调用 setState ,这将更新该值。
我尝试了不同的更新数据的方法(通过创建本地列表,然后使用addAll或仅通过分配),但我得到了相同的错误。
有人知道如何解决这个问题吗?
您收到此错误是因为下拉菜单尝试选择不存在的项目。
DropdownButton(
value: _selected, # < here you are trying to select `String _selected = '';`
items: _data,
Run Code Online (Sandbox Code Playgroud)
要解决这个简单的问题,value请将其删除或设置在某处。
| 归档时间: |
|
| 查看次数: |
9449 次 |
| 最近记录: |