我正在建立一个状态扑动页面,允许用户互相关注。一旦他们都跟随另一个人,我就希望页面的状态发生变化并允许用户互相发消息。我创建了一个侦听器,该侦听器在正确加载页面后立即查询数据库。现在,如果用户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';
});
}
}
答案 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方法,因此将编辑文本内容。