StreamBuilder流未连接

时间:2020-03-29 22:02:51

标签: firebase flutter stream builder

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

1 个答案:

答案 0 :(得分:0)

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

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