我一直在学习有关创建订餐应用程序的教程。 在教程中,有一个餐厅模型文件,其中包含菜单项。
` 最终列表_菜单 = [
Food(
name: 'Classic Burger',
description: 'A half pounder with all the fixins.',
imagePath: 'lib/images/burgers/burger1.jpg',
price: 10.99,
category: FoodCategory.burgers,
availableAddons: [
Addon(name: 'Extra cheese', price: 0.69),
Addon(name: 'Bacon', price: 1.09),
Addon(name: 'Avocado', price: 2.25),
],
),`
那么吸气剂就是
List<Food> get menu => _menu;
我想从 firestore 获取这些数据。 我创建了一个名为“菜单”的集合
我在同一个 dart 文件中创建了这个未来的方法。
Future getMenuData() 异步 {
CollectionReference 菜单 = FirebaseFirestore.instance.collection('menu');
// Get docs from collection reference
// QuerySnapshot querySnapshot = menu.get() as QuerySnapshot<Object?>;
QuerySnapshot querySnapshot = await menu.get();
// Get data from docs and convert map to List
final allData = querySnapshot.docs.map((doc) => doc.data()).toList();
return allData as List<Food>;
}
然后我将吸气剂更新为
List<Food> get menu => getMenuData();
这会产生编译错误
无法从函数“menu”返回“Future”类型的值,因为它的返回类型为“List”。
那么如何从 firestore 加载菜单而不是在模型文件中硬编码呢?
您需要循环遍历数据以将其设置为模型 Food。
// Get docs from collection reference
// QuerySnapshot querySnapshot = menu.get() as QuerySnapshot<Object?>;
QuerySnapshot querySnapshot = await menu.get();
// Get data from docs and convert map to List
final allData = querySnapshot.docs.map((doc) => doc.data()).toList();
return List<Food>.from(allData?.map((x) => Food(
name: x[“name”],
description: x[“description”],
imagePath: x[“imagePath”],
price: x[“price”],
// The rest of your values
);
));