Мне нужно получить документы со списком объектов в 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());
};
, но все они не работают с msg:
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,
};}}