如何正确配置Flutter Firebase Database onEntryChanged侦听器?

时间:2019-09-16 06:24:39

标签: firebase firebase-realtime-database flutter state

我正在建立一个状态扑动页面,允许用户互相关注。一旦他们都跟随另一个人,我就希望页面的状态发生变化并允许用户互相发消息。我创建了一个侦听器,该侦听器在正确加载页面后立即查询数据库。现在,如果用户2进行了更改,我试图立即使用onEntryChange来更新用户1的页面,并且该页面不起作用。我进入并手动删除了数据库中的条目,并且UI状态保持不变。这是我的代码...

String messageBtn;

     FriendsVideoPageState(){
        fb.child('friends/$id/friends/$uid').onChildChanged.listen(_onEntryChanged);
      }

      _onEntryChanged(Event event) {
        print('Listener..............${event.snapshot.value.toString()}');
        if (event.snapshot.value != null){
          setState(() {
            messageBtn = 'Message';
          });
        } else {
          setState(() {
            messageBtn = 'Invite';
          });
        }
      }

1 个答案:

答案 0 :(得分:0)

onChildChanged是一个数据流,当我使用数据流时,我经常使用StreamBuilder,因为它使事情变得直截了当。

因此,您可以将StreamBuilder与以下内容一起使用:

Widget build(BuildContext build) {
  return StreamBuilder(
    stream: fb.child('friends/$id/friends/$uid').onChildChanged,
    builder: (context, snapshot) {
      return Text(snapshot.data == null ? 'Loading' : snapshot.data.snapshot.value ? 'Message' : 'Invite');
    },
  );
}

每当流有新值到达时,都会调用builder方法,因此将编辑文本内容。