# #firebase #flutter #firebase-realtime-database
Вопрос:
В настоящее время я использую базу данных Firebase в реальном времени и построитель потоков для прослушивания таких изменений:
late var stream = FirebaseDatabase.instance .reference() .child("devices") .child(user_id); @override Widget build(BuildContext context) { return Scaffold( body: StreamBuilderlt;Eventgt;( stream: stream.onValue, builder: (context, snapshot) { print('stream updated'); if (snapshot.hasData amp;amp; !snapshot.hasError amp;amp; snapshot.data?.snapshot.value != null) { var data = snapshot.data!.snapshot.value; handler.updateData(data); } return Column(
Когда виджет только создается, он работает совершенно нормально, поэтому я могу вернуть соответствующие данные. Однако, когда я вношу изменения в базу данных, значения не обновляются. Что я делаю не так?
Структура, которую я использую для своих данных, — это Устройства — gt; идентификатор пользователя — gt; gt; данные, если это уместно.
правка: Проблема была не в моем коде, а в том, что веб-приложение flutter не обновлялось до тех пор, пока окно браузера не оказалось в фокусе.
Комментарии:
1. для чего предназначена эта функция handler.updateData(данные);?
2. Он просто обновляет соответствующие данные на моментальном снимке
3. почему бы не передать данные моментального снимка напрямую виджетам?
4. Отделение бизнес-логики от пользовательского интерфейса
5. Поскольку вы используете поток, что уже означает, что ваш пользовательский интерфейс отделен от логики, и снимок регулярно прослушивает изменения, но ваш обработчик.Обновленные данные(данные); не может обновить пользовательский интерфейс, чтобы проверить вашу функцию или попытаться передать данные с помощью снимка.