Невозможно прослушать входящие данные из базы данных реального времени (RTDB) во флаттере - PullRequest
1 голос
/ 29 марта 2020

Вот структура моей базы данных в реальном времени.

enter image description here

В Flutter (ios) я пытаюсь создать ссылку с кодом ниже:

final tempRef = FirebaseDatabase.instance.reference().child("temp_hum");

Затем я следую общий протокол для прослушивания изменений в базе данных с кодом ниже, и я не могу получить событие, чтобы оператор print в _onIncomingEvent работал

class _TemperatureProgressState extends State<TemperatureProgress> {
  List<Temperature> tempList;
  StreamSubscription<Event> _onTempSubscription;

 _onIncomingTemp(Event event) {
    print('event: ' +  event.snapshot.toString());
 }
   @override
  void initState() {
    super.initState();
    tempList = new List();
    _onTempSubscription = tempRef.onChildAdded.listen(_onIncomingTemp);
    print('sup');
  }
}

Есть идеи? Я думаю, что одним из следующих является ошибка: - что мой код может быть неправильным - я не создаю свою ссылку на firebase должным образом с child ('temp_hum') - Возможно, я даже не подключен к нужной базе данных?

ОБНОВЛЕНИЕ 1: - Я обнаружил, что указывал на неверный URL базы данных в моем файле GoogleService-Info.splist. Все еще не могу получить входящие данные, хотя

ОБНОВЛЕНИЕ 2: - Теперь я могу получать данные, прослушивая .then(). Тем не менее, я получаю данные только один раз, есть ли способ продолжать слушать?

tempRef.once().then((DataSnapshot snapshot){
   print('data: ${snapshot.value}');
});

1 Ответ

1 голос
/ 30 марта 2020

Нашли решение, код будет ниже. Как говорит Фрэнк в комментарии, Once () будет делать запрос только один раз, поэтому он будет работать для извлечения данных из запроса get. Моим требованием было постоянно слушать данные. Просто дополнительная информация, limitToLast(1) будет получать самые последние данные вместо того, чтобы получать все из любой коллекции, которую вы «слушаете», из базы данных Firebase Realtime.


    tempRef.limitToLast(1).onValue.listen((Event event) {
       Map data = event.snapshot.value;
          data.forEach((index, data) => {
             print('weight data: ${data}'),
             setState((){
               weightList.add(new Weight(data['avg_weight'], data['hive_weight'], data['object_id'], data['time'], data['user_id']));
          })
       });
    });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...