gpt4 book ai didi

flutter - 'Future> Function()' 循环中使用的类型 'for' 必须实现 Iterable - Flutter

转载 作者:行者123 更新时间:2023-12-04 11:30:29 29 4
gpt4 key购买 nike

我正在尝试返回 Map来自 Future从数据库中获取值后,但我无法打印这些值。访问值时出现以下错误

The type 'Future<Map<String, dynamic>> Function()' used in the 'for' loop must implement Iterable.
下面是简单的代码。
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']),
]),
],
)
}
DatabaseService类(class)
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;
}
}

最佳答案

你没有从 future 得到结果。您正在尝试使用 Future 而不是其中的 map 。
此外,您正在构建函数中启动此 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']),
]),
],
)
}

或者您可以使用 FutureBuilder .

关于flutter - 'Future<Map<String, dynamic>> Function()' 循环中使用的类型 'for' 必须实现 Iterable - Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63593229/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com