Flutter + Firestore: введите '_InternalLinkedHashMap 'не является подтипом типа' DocumentSnapshot ' - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь преобразовать документ Firebase в класс / модель.

Сначала я запускаю запрос:

  QuerySnapshot snapshot = await Firestore.instance
      .collectionGroup('myGroup')
      .where('letter', isEqualTo: 'a')
      .getDocuments();
  List results = [];

  snapshot.documents.forEach((f) {
    results.add(f.data);
  });

Затем я бы хотел "преобразовать" определенный документ для класса / модели.

Обычно я делаю это с этим кодом:

myResult = model.fromDocument(doc);

Но когда я делаю это сейчас с этим кодом:

myResult = model.fromDocument(results[3]);

Это выдает эту ошибку:

type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'DocumentSnapshot'

Я видел этот пост переполнения стека: Новый: тип '_InternalLinkedHashMap 'не является подтипом типа' DocumentSnapshot '

Проблема заключается в том, что он работает, если вы добавляете документ, а не document.data

snapshot.data[index].data // is of type Map<String,Dynamic>     
snapshot.data[index] // is the DocumentSnapshot

Как преобразовать делать c .данные для модели / класса?

Спасибо!

1 Ответ

0 голосов
/ 13 апреля 2020

Вы только на шаг приблизились к конвертации в модель, когда сделали c .data, теперь ваше старое преобразование из fromDocument выглядит как

_songId = doc.data['songId'];

, так как теперь это do c. часть данных исчезла, вам просто нужно позвонить

_songId = data['songId'];//data is the value passed through fromDoc as parameter

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

List<DocumentSnapshot> results;

snapshot.documents.forEach((f) {
    results.add(f);//removing the .data
  });

//now this code below works just fine

myResult = model.fromDocument(results[3]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...