use*_*216 6 combobox asynchronous dart flutter
我的fetchCities()方法返回Future<List<City>>并从rest webservice加载数据。填充项目的代码:
Widget buildCitiesSelector(){
return new Center(
child: FutureBuilder(
future: fetchCities() ,
builder: (context, snapshot){
if (snapshot.hasData) {
return new DropdownButton <City>(
hint: Text('Wybierz miasto'),
items: snapshot.data.map<DropdownMenuItem<City>>((City value) {
return DropdownMenuItem<City>(
value: value,
child: Text(value.name),
);
}).toList(),
onChanged: (value) {
setState(() {_selectedCity = value;});
},
value: _selectedCity,
);
}
else{
return CircularProgressIndicator();
}
}
)
);
}
Run Code Online (Sandbox Code Playgroud)
结果:项目在选择器中正确显示。但是,在选择任何特定项目时,我遇到了异常:
我/扑(13910):???小部件库捕获的异常 ????????????????????????????????????????????? ??????????????? I/flutter (13910): 以下断言被抛出 building FutureBuilder>(dirty, state: I/flutter (13910): _FutureBuilderState>#dacd9): I/flutter (13910): 'package:flutter/src/material/dropdown .dart':断言失败:第 560 行 pos 15:'items == null || I/flutter (13910): items.isEmpty || 值 == 空 || items.where((DropdownMenuItem item) => item.value == I/flutter (13910): value).length == 1': 不是真的。
如何正确选择商品?任何想法有什么问题?
你不应该FutureBuilder在这种情况下使用。而是获取数据,initState()然后使用setState()更新视图进行重建。
如果每次调用时都fetchCities()创建一个新的Future,那么build()每次重建 UI 时都会调用该获取(这可能很频繁)
https://docs.flutter.io/flutter/widgets/FutureBuilder-class.html
未来必须更早获得,例如在 State.initState 期间,...
| 归档时间: |
|
| 查看次数: |
4478 次 |
| 最近记录: |