Я нуб с флаттером, пытаюсь поработать с некоторыми примерами. Я создал виджет, который использует StreamBuilder для получения запроса из Firebase. Он отлично работает, но никогда не обновляет интерфейс при изменении данных. Я попытался прочитать об этом, и из всего, что я вижу, это должно работать из коробки. Есть ли какой-то шаг, который я пропускаю на стороне Firebase, чтобы сделать возможными изменения? Или SteamBuilder нужно как-то настроить, чтобы он время от времени извлекал данные? Код является базовым c, просто скопируйте и вставьте несколько примеров:
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: Firestore.instance
.collection("XXX").orderBy('YYY')
.where("userID", isEqualTo: userID)
.snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
valueColor: new AlwaysStoppedAnimation<Color>(
Color.fromRGBO(212, 20, 15, 1.0),
),
),
);
} else {
// Return some list view using the data in snapshot.data.documents
}
}
);
}
[Обновить]: похоже, мои данные не обновляются даже при изменении запроса. Я предполагаю, что он использует некоторые локально кэшированные данные и не извлекает их снова с сервера.
[Обновление 2]: когда я использую запрос, который не дает результатов (например, несуществующая коллекция), вращающееся колесо просто продолжает идти. При повторном выполнении правильного запроса он возвращается к тем же старым результатам, не отражая каких-либо изменений в облаке Firebase.
[Обновление 3]: похоже, проблема связана с моим потоком, содержащим orderBy. Как только убираю что все работает нормально. Это ошибка?