Fai*_*mal 5 future async-await flutter
我试图从数据库中获取值后返回Map,Future但我无法打印这些值。访问值时出现以下错误
The type 'Future<Map<String, dynamic>> Function()' used in the 'for' loop must implement Iterable.
Run Code Online (Sandbox Code Playgroud)
下面是简单的代码。
class ChefDishes extends StatefulWidget {
@override
_ChefDishesState createState() => _ChefDishesState();
}
class _ChefDishesState extends State<ChefDishes> {
@override
Widget build(BuildContext context) {
var _chefDishes = DatabaseService().getChefDishList;
return Scaffold(
.....
Column(
children: [
for (var item in _chefDishes) // <---- E R R O R I S H E R E
ListView(children: [
Text(item['dishname']),
Text(item['dishPrice']),
]),
],
)
}
Run Code Online (Sandbox Code Playgroud)
DatabaseService 班级
class DatabaseService {
Future<Map<String, dynamic>> getChefDishList() async {
Map<String, dynamic> chefDishes;
var result =
await Firestore.instance.collection('dish').("chefID", isEqualTo: uid).getDocuments();
result.documents.forEach((eachResult) {
chefDishes = eachResult.data;
});
return chefDishes;
}
}
Run Code Online (Sandbox Code Playgroud)
你没有得到来自未来的结果。你正在尝试使用未来而不是其中的地图。
另外,您要在构建函数中启动此 getChefDishList,这是一个很大的禁忌。
这是解决此问题的一种方法:
class _ChefDishesState extends State<ChefDishes> {
Map<String, dynamic> _chefDishes;
@override
initState() {
startAsyncInit();
}
Future startAsyncInit() async {
setState(() {
_chefDishes = await DatabaseService().getChefDishList;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
.....
Column(
children: [
for (var item in _chefDishes) // <---- E R R O R I S H E R E
ListView(children: [
Text(item['dishname']),
Text(item['dishPrice']),
]),
],
)
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用FutureBuilder.
| 归档时间: |
|
| 查看次数: |
3496 次 |
| 最近记录: |