Веб-приложение Flutter: Snapshort возвращает нулевое значение

Я новичок в флаттере и пытался получить данные из firebase и отобразить, но его снимок равен нулю. Я отвечал на аналогичные вопросы, заданные другими пользователями, но ничего не работало.

Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    leading: BackButton(
      color: Colors.white,
    ),
    bottomOpacity: 1.0,
    backgroundColor: mucolor1,
    title: Text(
      "Customer receipt ",
      style: TextStyle(color: Colors.white, fontSize: 12),
    ),
  ),
  body: Stack(
    clipBehavior: Clip.none,
    alignment: Alignment.topCenter,
    children: [
      Container(
        child: StreamBuilder(
          stream: FirebaseFirestore.instance
              .collection("users")
              .doc(tableNo)
              .collection("order")
              .snapshots(),
          builder: (BuildContext context,
              AsyncSnapshot<QuerySnapshot> snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting)
              return new Center(child: new CircularProgressIndicator());

            if(snapshot.data!=null){
              return Container(
                margin: EdgeInsets.fromLTRB(20, 100, 20, 0),
                child: ListView(
                  children: snapshot.data.docs.map((document) {
                    return Container(
                        color: Colors.white54,
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Card(
                              elevation: 0,
                              child: Container(
                                padding: EdgeInsets.all(10),
                                child: Row(
                                  mainAxisAlignment:
                                  MainAxisAlignment.spaceAround,
                                  children: [
                                    Text("Tsh " +
                                        document.get("price").toString() +
                                        "/="),
                                    Text(document.get("qty").toString()),
                                    Text(document.get("title")),


                                  ],
                                ),
                              ),
                            )
                          ],
                        ));
                  }).toList(),
                ),
              );
            }else {
              return Positioned(
                top: 80,
                child: Center(
                    child: Container(
                        margin: EdgeInsets.fromLTRB(20, 10, 20, 0),
                        child: Text("No data"))),
              );
            }

          },
        ),
      ),
      Positioned(
        top: 10,
        child: Center(
            child: Container(
                margin: EdgeInsets.fromLTRB(20, 10, 20, 0),
                child: Text("Your Order"))),
      ),
      Positioned(
          top: 50,
          child: Container(
              margin: EdgeInsets.fromLTRB(20, 10, 20, 0),
              child: Text(
                "Total Cost Tsh " + grandTotal + "/=",
                style:
                    TextStyle(color: mucolor2, fontWeight: FontWeight.bold),
              ))),
    ],
  ),
);

} }

Вот моя структура базы данных:

введите описание изображения здесь

введите описание изображения здесь

Пожалуйста, мне нужна твоя помощь. Я уже месяц пытаюсь решить эту проблему.


person Bethson    schedule 08.01.2021    source источник
comment
пробовали использовать collectionGroup ('order') - firebase .google.com / docs / firestore / query-data /   -  person Muthu Thavamani    schedule 08.01.2021


Ответы (2)


Ваши users документы пусты; Это означает, что на самом деле на его месте нет документа.

В этом случае вы должны использовать collectionGroup('order') - https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query

Хорошая ссылка: Пустая коллекция облачной функции Firestore

person Muthu Thavamani    schedule 08.01.2021
comment
Спасибо за хороший совет, но у меня все еще та же проблема. Пытался проверить состояние подключения моментального снимка, и он возвращает не подключено if (snapshot.connectionState != ConnectionState.done){ return Positioned( top: 80, child: Center( child: Container( margin: EdgeInsets.fromLTRB(20, 10, 20, 0), child: Text("Not connected")))); } - person Bethson; 13.01.2021
comment
ЗДЕСЬ ПРАВИЛА МОЕЙ БД ....... rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow write, read; } } } - person Bethson; 13.01.2021
comment
хорошо, что я могу писать в базе данных из веб-приложения. Итак, я задаюсь вопросом, что мне не хватает? Пожалуйста, помогите мне с этим - person Bethson; 13.01.2021
comment
Для Streambuilder проверьте ConnectionState.active - data being non-null, and possible changing over time. или snapshot.hasdata - returns whether this snapshot contains a non-null data value. - person Muthu Thavamani; 14.01.2021
comment
Да ... Спасибо состояние подключения работает. Он подключается, но по-прежнему нет данных. - person Bethson; 15.01.2021
comment
Не создавать проблемы с переходом на нулевую безопасность? @Muthu - person Bethson; 15.01.2021
comment
согласно документу и упомянутому в моем предыдущем комментарии, состояние соединения обрабатывает данные null. так что проверка состояния будет достаточно хорошей. - person Muthu Thavamani; 15.01.2021
comment
попробуйте обновить свой экран, обработав все состояния; избегая немногих, заставьте пользовательский интерфейс застрять на чем-то другом. - person Muthu Thavamani; 15.01.2021
comment
хорошо, спасибо, использование initalData может решить проблему ..? и как добавить initialData - person Bethson; 16.01.2021
comment
Лучше показать пользователю состояние снимка (прогресс, ошибка). с асинхронным снимком у нас не может быть initialData. Однако по умолчанию вы можете показать пользователю экран по умолчанию, а затем, когда состояние моментального снимка изменится на active or hasData, обновите пользовательский интерфейс соответствующими данными. - person Muthu Thavamani; 16.01.2021
comment
Надеюсь, ответ поможет и решит вашу проблему; постарайтесь принять и проголосовать за ответ, чтобы другие узнали. Спасибо! - person Muthu Thavamani; 16.01.2021

Я заменяю firebase SDK js версии 8.2.1 на 7.22.1, и он работает.

До замены.

SDK 8.2.1


  <script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-app.js"></script>

  <script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-firestore.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-analytics.js"></script>

SDK 7.22.1

  <script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-app.js"></script>

  <script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-firestore.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-analytics.js"></script>

и теперь это работает.

person Bethson    schedule 25.01.2021