Ошибка состояния (Плохое состояние: поле не существует в форме DocumentSnapshotPlatform). Как я могу получить документ из firestore?

# #firebase #flutter #dart #google-cloud-firestore

Вопрос:

Я новичок в флаттере. Я хочу получить конкретный документ из firestore, используя его uid, а затем перенести этот документ в тип значения, с которым я могу справиться. НО при запуске приложения я получаю точку останова : Ошибка состояния (Плохое состояние: поле не существует в форме DocumentSnapshotPlatform). Это код:

 final cloth = await DatabaseService(uid: uid)  .clothCollection  .doc(uid)  .get()  .then((doc) =gt; {  Cloth(  brand: doc.get('brand'),  name: doc.get('name'),  color: doc.get('color'),  url: doc.get('url'))  });  

и Ткань :

 class Cloth {  final String? name;  final String? url;  final String? brand;  final String? color;   Cloth({this.name, this.brand, this.color, this.url}); }   

Если есть более простой способ получить этот документ, дайте мне знать. Спасибо за вашу помощь!

Комментарии:

1. Вероятно, у doc нет функций. get ().

Ответ №1:

get Атрибут не существует в DocumentSnapshot (doc). Вместо этого вы должны использовать data() метод , который возвращает a Maplt;String, dynamicgt; или null, если документ не существует. Рекомендуется всегда проверять, существует ли документ, прежде чем выполнять дальнейшие действия.

 final cloth = await DatabaseService(uid: uid)  .clothCollection  .doc(uid)  .get()  .then((doc) {  if (doc.exists) {  Maplt;String, dynamicgt;? data = doc.data();   return Cloth(  brand: data?['brand'],  name: data?['name'],  color: data?['color'],  url: data?['url']);  } else {  print('Document does not exist.');  }  });