Flutter StreamBuilder当ConnectionState.done时如何运行setState()?

时间:2020-11-08 18:23:37

标签: flutter stream-builder

我正在使用StreamBuilder显示加载进度栏。可以到达ConnectionState.done-运行setState()来更新StreamBuilder之外的我的窗口小部件吗?。

如果我尝试从小部件调用setState(),则会收到错误消息

在构建过程中调用

setState()或markNeedsBuild()

 case ConnectionState.done:
          children = <Widget>[
                    Icon(
                        Icons.info,
                        color: Colors.blue,
                         size: 60,
                         ),
                          Padding(
                            padding: const EdgeInsets.only(top: 16),
                            child: Text('\$${snapshot.data} (closed)'),
                          )
                        ];
                        
                        //I'm trying to trigger an update
                        setState((){
                          isOffsetLoading = true;
                        });
                        
                        break;

1 个答案:

答案 0 :(得分:0)

从文档中: Streambuilder:https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html

基于与Stream交互的最新快照构建自身的小部件。

setState:https://api.flutter.dev/flutter/widgets/State/setState.html

调用setState会通知框架此对象的内部状态已更改,该方式可能会影响此子树中的用户界面,这会导致框架为该State对象安排构建。

该错误表示您在构建窗口小部件时正在调用setState,这将导致窗口小部件反复重建。

您可以更新isOffsetLoading并在单独的函数中调用setState,然后在问题的代码中调用该函数。