# #flutter #dart #firebase-realtime-database #google-cloud-firestore
Вопрос:
Плохое состояние: поле не существует в форме DocumentSnapshotPlatform
Соответствующим виджетом, вызывающим ошибку, был StreamBuilder<QuerySnapshot<Объект?><Объект?>> StreamBuilder:файл:///D:/EgoPro/Flutter Apps/task_app/lib/screens/task_screen.dart:189:13 это ошибка
StreamBuilder<QuerySnapshot>(
// <2> Pass `Stream<QuerySnapshot>` to stream
stream:
FirebaseFirestore.instance.collection('tasks').snapshots(),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.hasData) {
// <3> Retrieve `List<DocumentSnapshot>` from snapshot
final List<DocumentSnapshot> documents = snapshot.data!.docs;
print(documents);
return ListView(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
children: documents
.map(
(doc) => Meetingcard(
id: doc.get("id"),
title: doc.get("title"),
description: doc.get("description"),
time: TimeOfDay.now()),
)
.toList());
} else if (snapshot.hasError) {
return Text("'It's Error!'");
} else {
return CircularProgressIndicator();
}
},
)
Почему я получаю эту ошибку ?
Ответ №1:
doc.get
вернет эту ошибку, если указанное поле не существует в документе. Таким образом, одно из ваших полей: id
, title
, description
(или несколько из них) не может быть найдено doc
.
Вы можете добавить точку останова или журнал и проверить результат doc.data()
внутри себя .map((doc)...
, чтобы узнать, что в нем содержится.
(Один из возможных способов обработки необязательных полей-определить класс модели, создать конвертер, в котором вы обрабатываете пропущенные значения, и назначить пустую строку или другое значение по умолчанию, чтобы при чтении данных из потока вы могли использовать эту модель, и вам не нужно обрабатывать там пропущенные значения.)
Редактировать:
Основываясь на изображении ошибки в комментарии, ошибка, по-видимому, находится где-то в другом месте, где вы присваиваете значение documents
. snapshot.data!.docs
имеет тип List<QueryDocumentSnapshot<Object?>>
и не `Список. Попробуйте выполнить следующий код:
StreamBuilder<QuerySnapshot>(
// <2> Pass `Stream<QuerySnapshot>` to stream
stream:
FirebaseFirestore.instance.collection('tasks').snapshots(),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.hasData) {
// <3> Retrieve `List<DocumentSnapshot>` from snapshot
return ListView(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
children: snapshot.data!.docs
.map(
(DocumentSnapshot doc) => Meetingcard(
id: doc.data()!["id"],
title: doc.data()!["title"],
description: data()!["description"],
time: TimeOfDay.now()),
)
.toList());
} else if (snapshot.hasError) {
return Text("'It's Error!'");
} else {
return CircularProgressIndicator();
}
},
)
Комментарии:
1. У меня есть эти поля в моем firestore, и я их тоже перепроверил
2. Вы проверили результат
doc.data()
?3. Когда я получаю индивидуальный доступ, я получаю значения, но он все еще показывает эту ошибку
4. когда я использую doc.data (), он показывает ошибку проверки null
5. Можете ли вы добавить к своему вопросу все содержание
doc
в пределах.map
?