StreamBuilder 流未连接

StreamBuilder stream not connecting

我是 flutter 的新手,我正在尝试使用 firebase 的实时数据库和 StreamBuilder 来实现一个应用程序,以不断显示更新 phone 屏幕中显示的值的数据。 我的问题是,出于某种原因,流将 return 一个数据事件(snap.hasData = true)仅在我第一次加载时 运行 主要进入 emultor,如果我热重载脚本,我的 StreamBuilder 不会构建并且 snap.hasData == false。我相信代码没有错,因为正如我之前所说,通过流的连接在我第一次安装和 运行 模拟器中的应用程序时被初始化

这是我的代码,这个屏幕的初始状态和构建。

@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

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

您可以在 build 函数中使用 FutureBuilder,将 FutureBuilder 的结果传递给 StreamBuilder,而不必使用 initState完全没有。