StreamBuilder流未连接

问题描述 投票:0回答:1

我是个新手,正在尝试使用firebase的实时数据库和StreamBuilder来实现一个应用程序,以不断显示数据以更新手机屏幕上显示的值。我的问题是,由于某种原因,流只会在我第一次加载并将主程序运行到乳化器中时才返回数据事件(snap.hasData = true),如果我热重新加载脚本,则我的StreamBuilder不会build和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的实时数据库和StreamBuilder来实现一个应用程序,以不断显示数据以更新手机屏幕上显示的值。我的问题是...

firebase flutter stream builder
1个回答
0
投票

您正在初始化reference2Dashboard中的initStateinitState仅在首次创建状态或状态被销毁且必须重新创建后才运行。热重载不会修改您的状态,因此initState不会运行。如果您执行热重启,它将仅再次运行。

© www.soinside.com 2019 - 2024. All rights reserved.