Почему я получаю эту ошибку в плохом состоянии: поле не существует в форме DocumentSnapshotPlatform при использовании firestore?

# #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 ?