firebase - 如何正确配置 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';
});
}
}
解决方案
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');
},
);
}
每次流的新值到达时,都会调用构建器方法并因此编辑文本内容。
推荐阅读
- mysql - Mysql 将排序规则从 latin1_swedish_ci 更改为 utf8mb4_bin
- mysql - Mysql多个连接具有相同的列
- google-sheets - 谷歌表格“IFS 需要成对的参数”
- javascript - 如何在 mouseenter 上显示 subnav 在 mouseout 上隐藏
- javascript - 如何在 TypeScript 中重新排列数组
- vb.net - 乘法图
- delphi - 如何检测文件夹更改何时完成?
- c - 如何在小端机器上返回 351351 int?
- bash - 如何在 If 语句中比较 shell 中的 2 个布尔变量
- c++ - C++ 评估它不应该的表达式