firebase - 如何将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
];
解决方案
步骤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();
就是这样。现在您有了产品对象列表。
推荐阅读
- typo3 - Gridelements 数据处理:将参数传递给扩展(ctype = list)
- css - 如何在 CSS 中实现终端反向视频模式(交换前景色和背景色)?
- spring - Spring:从 Spring 4.1.3 中的 SPEL 表达式中指定 @Scheduled 中的 cron 属性
- google-cloud-platform - GCP 中的流式处理抓取的音频
- numpy - 将数据放在页面锁定地址而不复制
- dart - dartlang 中的 double.toStringAsFixed 和 toStringAsPrecision 有什么区别?
- sql-server - SSIS 包手动运行良好,但通过 JOB 抛出错误
- java - JavaFX 中的 registerChangeListener 方法有什么作用?
- python - 如果两个连续字符相同,则将字符添加到列表中,如果字符串不包含重复字符,则将“x”添加到列表中
- javascript - 使用 .click 功能加载图库时,TouchTouch 图库不起作用