json - 如何获取包含对象列表的文档?- 火库
问题描述
我需要在 firestore 中获取包含对象列表的文档
doc 1
id:123
name: product1
categories:
[0]
catid:21
name: category21
[1]
catid:34
name: category34
doc 2
id:456
name: product2
categories:
[0]
catid:9
name: category9
[1]
catid:4
name: category4
我终于达到了如何添加带有类别对象列表的产品(因为我在下面的 productModel 中定义了类别),但是我无法获得带有类别对象列表的产品:(
我在 ProductModel 中尝试过
if(data[CATEGORIES] != null){
// categories.add(data[CATEGORIES].map());
categories.add(CategoryModel.fromMap(data[CATEGORIES]));
// categories.addAll(data[CATEGORIES].values());
// categories = data[CATEGORIES].map((i) => i.fromMap());
};
但它们都不适用于味精:
Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String,
dynamic>'
火库:
getProducts(ProductProvider productProvider) async{
QuerySnapshot snapshot= await Firestore.instance.collection('products').getDocuments();
List<ProductModel> _productList=[];
snapshot.documents.forEach((document){
ProductModel product= ProductModel.fromMap(document.data);
_productList.add(product);
});
productProvider.productList=_productList;
}
uploadProduct(ProductModel product) async {
CollectionReference productRef = Firestore.instance.collection('products');
DocumentReference documentRef = await productRef.add(product.toMap());
product.id = documentRef.documentID;
print('uploaded product successfully: ${product.toString()}');
await documentRef.setData(product.toMap(), merge: true);
}
}
数据模型
ProductModel{
String id;
String name;
List<CategoryModel> categories
ProductModel.fromMap(Map<String, dynamic> data){
id = data['id'];
name= data['name'];
categories = data['categories']; // ??
}
Map<String, dynamic> toMap() {
return {
'id': id,
'name':name,
'categories': categories.map((i) => i.toMap()).toList(), // this worked well
};}}
CategoryModel{
String id;
String name;
CategoryModel.fromMap(Map<String, dynamic> data){
id = data['id'];
name= data['name'];
}
Map<String, dynamic> toMap() {
return {
'id': id,
'name':name,
};}}
解决方案
如果data['categories']
是Map<String, dynamic>[]
,
您可以将数据映射到类别模型列表。
categories = data['categories']
.map<CategoryModel>((value) => CategoryModel.fromMap(value))
.toList();
推荐阅读
- c# - 在 ASP.Net MVC 中计算不包括周末和公共假期的天数
- javascript - 如何在我的 JSON 中获取 URL 并将其放入模式中?
- excel - 用户输入后,我已经自动填充了 2 个其他文本框,如何阻止我的宏在其他框上运行搜索?
- sql - 从 Oracle DB 中的两个表和 rownum 条件的连接中删除行
- html - 如何将数据从一个组件传递到另一个组件
- vhdl - 实体返回强制未知“X”
- python - 您如何确定谁在与谁使用 API 玩游戏?
- r - 使用 caretEnsemble 创建集成模型时出错
- java - 如何使用 gorm 动态添加查询参数?
- node.js - node.js + wordpress 返回帖子数据