Flutter: StreamBuilder использует старый поток вместо нового потока - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь отобразить список Google-Firestore в реальном времени в моем приложении Flutter, используя StreamBuilder от Flutter.

Однако поток, похоже, использует как старые, так и новые данные, а не только новые. (См. Ниже)

//This is the widget with the stream 
      Expanded(
        child: StreamBuilder<QuerySnapshot>(
          stream: _firestoreInstance.collection("seeks").document('145725').collection("classes").document(_chosenClass)
              .collection("classTopics").document(date).collection("dateTopics").snapshots(),
          builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
            if (!snapshot.hasData) return Text('Loading...');
            return ListView(
              children: snapshot.data.documents.map((DocumentSnapshot document){
                debugPrint("DOCCUMENT ID: ${document.documentID} AND topic Name ${document['topicName']}");
                return ListTile(
                  title: Text(document['topicName']),
                  subtitle: TopicSlider(_chosenClass, document.documentID), //pass class name and topic id to slider to save in firebase
                );
              }).toList(),
            );
          },
        ),
      )

1-й Я выбираю CS115 и дату, которая дает мне правильный список (щелкните для изображения)

Идентификаторы документов также верны (вывод debugPrint):

Однако, как только я изменил класс на CS331 , , это произойдет .

Как видите, первые три идентификатора документа для CS331 в точности совпадают с идентификаторами для CS115. Кажется, что поток просто использует те данные, которые были там ранее, прежде чем использовать новые данные. Я не понимаю, почему это так, поскольку я вызываю setState каждый раз, когда изменяется dropDownItem - так что весь виджет может перестраиваться (таким образом, регенерируя новый объект потока с обновленными данными). Это заставляет новый пользовательский интерфейс использовать значения старых данных. Я застрял на этой проблеме в течение нескольких дней, и, кажется, ничего не работает. Кто-нибудь знает, как решить эту странную ошибку? Заранее спасибо!

...