Flutter StreamBuilder не обновляется при изменении данных

# #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. Поскольку вы используете поток, что уже означает, что ваш пользовательский интерфейс отделен от логики, и снимок регулярно прослушивает изменения, но ваш обработчик.Обновленные данные(данные); не может обновить пользовательский интерфейс, чтобы проверить вашу функцию или попытаться передать данные с помощью снимка.