如何正确配置Flatter Firebase数据库onEntryChanged侦听器?

如何正确配置Flatter Firebase数据库onEntryChanged侦听器?,firebase,firebase-realtime-database,flutter,state,Firebase,Firebase Realtime Database,Flutter,State,我正在构建一个有状态的flatter页面,允许用户相互跟踪。一旦他们都跟随另一个人,我希望页面的状态改变,并允许用户互相发送消息。我创建了一个侦听器,在正确加载页面时查询数据库。现在,如果用户2进行了更改,我将尝试更新用户1的页面,立即使用onEntryChange,但它不起作用。我已经进入并手动删除了数据库中的条目,UI状态保持不变。这是我的密码 String messageBtn; FriendsVideoPageState(){ fb.child('friend

我正在构建一个有状态的flatter页面,允许用户相互跟踪。一旦他们都跟随另一个人,我希望页面的状态改变,并允许用户互相发送消息。我创建了一个侦听器,在正确加载页面时查询数据库。现在,如果用户2进行了更改,我将尝试更新用户1的页面,立即使用onEntryChange,但它不起作用。我已经进入并手动删除了数据库中的条目,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';
          });
        }
      }

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');
    },
  );
}

每次流的新值到达时,都会调用生成器方法,从而编辑文本内容。

我用StreamBuilder替换了我的“文本”小部件,但它没有按预期工作<代码>快照。数据从来都不是空的,它始终是一个“事件实例”,即使我在末尾添加了
toString()
。有什么想法吗?那么,您处理数据的方式可能没有问题,而Firebase数据库由于某种原因没有发送任何数据。我的第一个猜测是:你没有阅读这些数据的权限。第二:尝试其他流,如onValue、onchildaded等。。。如果它们有价值的话