如何将数据从Firestore映射到列表并转换为对象数据类型

u

我正在尝试将数据从FirestoreQueryDocumentSnapshot类型映射Object自定义的,Class但没有成功

这是我的课

class Food {
 String name;
 int price;
 String image;

  Food({this.name, this.price, this.image, });
}

下面的示例我在本地制作了数据并进行了正常工作

     List<Food> foodType1Local = [
        Food(
          name: 'Food 1',
          price: 10,
          image: 'assets/food1.png',
        ),
        Food(
          name: 'Food 2',
          price: 20,
          image: 'assets/food2.png',
        ),
        Food(
          name: 'Food 3',
          price: 30,
          image: 'assets/food3.png',
        ),
      ];
     List<Food> foodType2Local...
     List<Food> foodType3Local...

下面的示例我在Cloud Firestore中制作了数据并获取它是一个问题

在此处输入图片说明

下面的示例我正在从Cloud Firestore获取数据,但出现错误 type 'QueryDocumentSnapshot' is not a subtype of type 'Food'

  List foodType1Cloud = <Food>[];
  List foodType2Cloud = <Food>[];
  List foodType3Cloud = <Food>[];

  getFoodType1Cloud() async {
    QuerySnapshot snapshot = await FirebaseFirestore.instance.collection("foodType1").get();
      foodType1Cloud.addAll(snapshot.docs);
      foodType1Cloud.map((foodType1Data) {
        Food(
          name: foodType1Data['name'], //cant do --> name: foodType1Data[index]['name'],
          price: foodType1Data['price'], //cant do --> price: foodType1Data[index]['price'],
          image: foodType1Data['image'], //cant do --> image: foodType1Data[index]['image'],
        );
      }).toList();
  }
  getFoodType2Cloud()...
  getFoodType3Cloud()...

如果我尝试从本地数据中获取代码,则这是代码的主体,它可以正常工作,但是当我从云存储中获取信息时却无法正常工作

   //tabs of length "3"
   body: TabBarView(
     children: [
       Container(
         margin: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
         child: Column(
           children: <Widget>[
             buildFoodList(foodType1Local),
           ],
         ),
       ),
       Container(
         margin: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
         child: Column(
           children: <Widget>[
             buildFoodList(foodType1Loca2),
           ],
         ),
       ),
       Container...
       
     ],
   ),

这再次是代码的主体,但是如果我尝试从Cloud Firestore提取,则会显示错误type 'QueryDocumentSnapshot' is not a subtype of type 'Food'

        body: TabBarView(
          children: [
            Container(
              margin: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
              child: Column(
                children: <Widget>[
                  buildFoodList(foodType1Cloud),
                ],
              ),
            ),
            Container(
              margin: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
              child: Column(
                children: <Widget>[
                  buildFoodList(foodType2Cloud),
                ],
              ),
            ),
            Container...

          ],
        ),

我认为buildFoodList代码也是必要的,所以我以防万一

Widget buildFoodList(List foods) {
    return Expanded(
      child: GridView.builder(
        itemCount: foods.length,
        physics: BouncingScrollPhysics(),
        gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2,
          childAspectRatio: 0.8,
          mainAxisSpacing: 20,
          crossAxisSpacing: 20,
        ),
        itemBuilder: (context, index) {
          return FoodCard(foods[index]);
        },
      ),
    );
  }
穆图·塔瓦玛尼(Muthu Thavamani)

snapshot.docs返回的所有文档的安阵QuerySnapshot,显然它不是一个类型的Food

现在,您必须遍历文档数组,并使用data提供该快照所有数据成员。使用该数据,您可以将其转换为所需的任何类型的实例。

所以,代替这个

foodType1Cloud.addAll(snapshot.docs);

将文档内容转换为您的自定义对象,并将其添加到列表中

snapshot.docs.forEach(doc => {
   Map<String, dynamic> obj = doc.data;
  // convert this Map to your custom object and add it to your list
});

扑朔迷离中,您可以使用json_serializable进行此转换!

类似的SO参考-如何从Flutter中的Cloud Firestore加载数组和对象

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数据元素映射到数据类型

如何将数据类型映射到该数据类型的集合

如何将Mobus数据数组的数据类型转换为REAL数据类型

对象自动检测数据类型并转换为我需要的数据类型

如何遍历列表并转换数据类型

如何将Date数据类型转换为整数?

如何将NSInteger转换为NSString数据类型?

如何将 PyObjects 转换为 C 数据类型?

如何将 nvarchar 数据类型转换为数字

如何将元组字符串列表的数据类型转换为float

将数据类型映射到系列或列表

如何将 Firestore 数据转换为 JSON 对象?

如何使用推土机将数据类型映射到不同的数据类型?

如何将二进制网络数据包结构映射到Haskell标准数据类型(记录)?

如何将对象类型的实例“动态”转换为其特定数据类型?

如何将数据帧数据类型转换为字符串?

如何将熊猫数据框中的日期转换为“日期”数据类型?

如何将熊猫数据框中的日期转换为“日期”数据类型?

如何将* uint64和* uint32数据类型转换为int数据类型?

Haskell:如何将数据类型转换为其特定类型类之一?

如何将JSON数据类型转换为匹配的C#类型

如何将数据库中的行映射到对象列表?

Dart:如何将CSV数据映射到模型列表?

如何将数据从服务映射到本地JSON对象

如何将数据数组映射到对象数组?

Oracle如何将数据类型映射到CODE / ID-转储和dbms_sql.define_column产生数据类型代码

将数据类型“对象”转换为“浮动”

如何将现有列迁移到SQL中的新列,但值映射到新数据类型?

如何检测日期并转换为 datetime64 数据类型