首页 > 解决方案 > 如何正确配置 Flutter Firebase Database onEntryChanged 监听器?

问题描述

我正在构建一个有状态的 Flutter 页面,允许用户互相关注。一旦他们都关注另一个人,我希望页面的状态发生变化并允许用户互相发送消息。我创建了一个侦听器,该侦听器在正确加载页面后查询数据库一次。现在,如果用户 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';
          });
        }
      }

标签: firebasefirebase-realtime-databaseflutterstate

解决方案


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

每次流的新值到达时,都会调用构建器方法并因此编辑文本内容。


推荐阅读