Как получить список > от Firestore? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь создать список [Map [String, dynamic]], сохранить его в firestore и получить его. Проблема связана со списком, и он дает мне: type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>'

Все, что я действительно пытаюсь сделать, это сохранить свойства, указанные ниже, в списке «классов» и получить их индексы для отображения на экране. ,

Класс

class Cards {
  final List<String> question;
  final List<String> answer;
  final String title;
  final String uid;
  final List<Map<String, dynamic>> classes;

  Cards({  this.question,  this.answer, this.uid,  this.indexTitle, this.classes });

}

Дом

List<Map<String, dynamic>> listMap = [];

 listMap.add({ 
   "title": title,
   "question": [],
   "answer": []
  });


DatabaseService(uid: userId.uid).settingUserData(listMap);

Служба БД

  // Set data to firestore db
  Future settingUserData(List<Map<String, dynamic>> listMap) async {
    return await _collref.document(uid).setData({ 
      "classes": listMap  
      });
  }



Cards _indexCardFromSnapshot(DocumentSnapshot snapshot) {
    return Cards(   
      uid: uid,  
      classes: snapshot.data["classes"], // type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>'
      indexTitle: snapshot.data["indexTitle"],
      question: snapshot.data["question"],
      answer: snapshot.data["answer"], 
    );
  }

1 Ответ

1 голос
/ 20 марта 2020

Ошибка возникает из-за того, что когда вы пытаетесь извлечь поле массива из снимка, оно знает только, что поле является массивом, но фактически не знает, какой тип данных содержит массив. Вы можете использовать что-то вроде этого:

Cards _indexCardFromSnapshot(DocumentSnapshot snapshot) {
return Cards(   
  uid: uid,  
  classes: List<Map<String,dynamic>>.generate(
      snapshot.data["classes"].length,
      (int index) => Map<String,dynamic>
                     .from(snapshot.data["classes"].elementAt(index));
  ), 
  indexTitle: snapshot.data["indexTitle"],
  question: snapshot.data["question"],
  answer: snapshot.data["answer"], 
 );
}

Самое простое решение - сделать список классов List<dynamic>. Хотя он имеет недостаток в том, что в некоторых местах нет строгой проверки типов, но он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...