Флаттер / Google Firestore StreamBuilder не обновляются с базой данных - PullRequest
0 голосов
/ 28 февраля 2020

У меня проблема с моим StreamBuilder. В этом случае у меня есть TabBarView с 3 StreamBuilders (код этого поста с одной из трех вкладок). Когда что-то удаляется из БД, сборщик показывает неверные данные. Иногда предмет все еще там, иногда он удваивается. Я попытался удалить два оператора orderBy из запроса. Я горячо перезагрузил и данные были правильными. После добавления утверждений и горячей перезагрузки все было хорошо.

Почему это происходит? Это из-за заявлений orderBy?

Спасибо!

StreamBuilder(
          stream: Firestore.instance
              .collection("bookings")
              .document(localUser.centerName)
              .collection("center_bookings")
              .where("customerId", isEqualTo: localUser.userId)
              .orderBy("bookedMonth", descending: false)
              .orderBy("bookedDay", descending: false)
              .snapshots(),
          builder: (BuildContext context,
              AsyncSnapshot<QuerySnapshot> snapshot) {
            if (snapshot.hasError) {
              return Text("Error: ${snapshot.error}");
            }
            switch (snapshot.connectionState) {
              case ConnectionState.waiting:
                return Center(
                  child: CircularProgressIndicator(
                    backgroundColor: Theme.of(context).primaryColor,
                  ),
                );
              default:
                return Container(
                  margin: const EdgeInsets.symmetric(
                      horizontal: 5.0, vertical: 10.0),
                  child: ListView(
                      children: snapshot.data.documents.map((document) {
                    if (_datesNext7Days.contains(document["bookedFor"])) {
                      return Padding(...);
                    } else {
                      return SizedBox();
                    }
                  }).toList()),
                );
            }
          },
        ),

1 Ответ

1 голос
/ 28 февраля 2020

попытайтесь вернуть тип yeild yourdata для продолжения потока данных в streambuilder. Вот пример и не забудьте * in asyn c

 static Stream<List<MeetingItem>> getMeetingsList() async* {
   Firestore fireStore = Firestore.instance;
   try {
    var collectionsMeeting = fireStore.collection(VConstants.KEYS.meetings);

    var snapshots = collectionsMeeting.snapshots();

   await for (QuerySnapshot snap in snapshots) {
    List<MeetingItem> meetingList = [];
    snap.documents.forEach((element) {
      meetingList.add(MeetingItem(element.documentID, element.data));
    });
    yield meetingList;
  }
 } catch (e) {
  print(e);
 }
}
}

вызвать этот метод из этой строки

 StreamBuilder(
      stream: getMeetingsList()//customize it with your return value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...