Я пытаюсь отобразить список 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 - так что весь виджет может перестраиваться (таким образом, регенерируя новый объект потока с обновленными данными). Это заставляет новый пользовательский интерфейс использовать значения старых данных. Я застрял на этой проблеме в течение нескольких дней, и, кажется, ничего не работает. Кто-нибудь знает, как решить эту странную ошибку? Заранее спасибо!