【发布时间】:2020-07-10 06:37:28
【问题描述】:
我是一个新手,我正在尝试使用 firebase 的实时数据库和 StreamBuilder 来实现一个应用程序,以不断地显示更新手机屏幕上显示的值的数据。
我的问题是,由于某种原因,流只会在我第一次加载并将 main 运行到 emultor 时返回数据事件(snap.hasData = true),如果我热重新加载脚本,我的StreamBuilder 不会构建和 snap.hasData == false。我相信代码没有错,因为正如我之前所说,通过流的连接是在我第一次在模拟器中安装和运行应用程序时初始化的
这是我的代码,这个屏幕的 initSate 和构建。
@override
void initState() {
super.initState();
databaseReference
.child('growboxs')
.orderByChild('access')
.equalTo(widget.user)
.once()
.then( (DataSnapshot snapshot) {
String path2child = snapshot.value.toString();
path2child =
'growboxs/' + path2child.substring(1, 18) + '/dashboard';
reference2Dashboard = FirebaseDatabase.instance.reference().child(path2child);
progressController = AnimationController(
vsync: this, duration: Duration(milliseconds: 2000)); //5s
isLoading = true;
});
}
@override
Widget build(BuildContext context) {
return isLoading ?
StreamBuilder(
stream: reference2Dashboard.onValue,
builder: (context, snap) {
if (!snap.hasData) {
return Center(child: CircularProgressIndicator());
}
if (snap.hasData && !snap.hasError &&
snap.data.snapshot.value != null) {
DataSnapshot snapshot = snap.data.snapshot;
doble temperature = snapshot.value['Temperature'].toDouble();
/* keeps on getting values and updating Widget*/
.
.
.
) : Center(child: CircularProgressIndicator());//StreamBuilder
}//build
【问题讨论】:
标签: firebase flutter stream builder