как получить документ со списком объектов? - пожарный магазин - PullRequest
0 голосов
/ 26 февраля 2020

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

1 Ответ

0 голосов
/ 27 февраля 2020

Если data['categories'] равно Map<String, dynamic>[],

, вы можете отобразить данные в список моделей категории.

    categories = data['categories']
        .map<CategoryModel>((value) => CategoryModel.fromMap(value))
        .toList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...