【发布时间】:2020-06-10 16:33:26
【问题描述】:
我需要在 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,
};}}
【问题讨论】:
标签: json flutter dart google-cloud-firestore