首页 > 解决方案 > 如何将firebase收集数据添加到flutter中的对象列表?

问题描述

我目前有一个名为 Product 的构造函数类

class Product {
  final String id;
  final String title, description;
  final List<String> images;
  final List<Color> colors;
  final double rating, price;
  bool isFavorite, isPopular;

  Product({
    required this.id,
    required this.images,
    required this.colors,
    this.rating = 0.0,
    this.isFavorite = false,
    this.isPopular = false,
    required this.title,
    required this.price,
    required this.description,
  });

  Map<String, dynamic> toMap() {
    return {
      "id": id,
      "name": title,
      "description": description,
      "price": price,
      "rating": rating,
      "images": images,
      "isPopular": isPopular,
      "isFavorite": isFavorite,
    };
  }
}

我的产品保存在名为“产品”的集合中。

final CollectionReference _productRef =
      FirebaseFirestore.instance.collection('products');

我想将收集数据添加到列表中。但是你们中的任何人都知道如何做到这一点?我使用 List 因为我使用 ...List.generate 来显示列表的每个产品

List<Product> products = [
// Insert here
];

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


步骤1

将名为 fromDoc(或您想要的任何名称)的工厂构造函数添加到 Product Object

例子:

factory Product.fromDoc(productDocumentFromFirebase) {
    return Product(
            //fill in the fields
            id: doc.id,
            name: doc.get("name"),
         )
}

第2步

从firebase获取数据列表作为动态列表


var dataFromFirebase = await FirebaseFirestore.instance.collection('products').get();

List productsDocuments = dataFromFirebase.docs;

第 3 步

将此动态数据列表映射到 Product 对象


List<Product> products = productsDocuments.map((productDoc) => Product.fromDoc(productDoc)).toList();

就是这样。现在您有了产品对象列表。


推荐阅读