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

Flutter Flatter StreamBuilder如何在ConnectionState.done时运行setState()?,flutter,stream-builder,Flutter,Stream Builder,我正在使用StreamBuilder显示加载进度条。到达ConnectionState.done-运行setState(),可以更新StreamBuilder之外的我的小部件 如果我试图从小部件调用setState(),我会得到一个错误 在生成过程中调用setState()或markNeedsBuild() case ConnectionState.done: 儿童=[ 图标( Icons.info, 颜色:颜色,蓝色, 尺码:60, ), 填充物( 填充:仅限常量边集(顶部:16), 子项:文

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

如果我试图从小部件调用
setState()
,我会得到一个错误

在生成过程中调用setState()或markNeedsBuild()

case ConnectionState.done:
儿童=[
图标(
Icons.info,
颜色:颜色,蓝色,
尺码:60,
),
填充物(
填充:仅限常量边集(顶部:16),
子项:文本(“\${snapshot.data}(已关闭)”,
)
];
//我正试图触发一个更新
设置状态(){
IsofSetLoading=真;
});
打破
来自文档: Streambuilder:

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

设置状态:

调用setState会通知框架此对象的内部状态已发生更改,可能会影响此子树中的用户界面,从而导致框架为此状态对象安排生成

该错误意味着您在构建小部件时调用setState,这将导致小部件重复重建


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

如果您可以提供可读且可复制的代码以及您得到的确切错误,这总是很有帮助的。什么是
isOffsetLoading?
我尝试了不同的选项-异步调用
setState
setState
在一个单独的函数中也
ValueListenableBuilder
没有成功。我不知道
isoffsetload
是什么。这不是你试图在你的问题中张贴的代码中更新的内容吗?你也可以考虑使用行为主体来更新这个值并在侦听处理程序中调用SETStand,谢谢帮助,我读了文档,我认为我的想法是不可能实现的……@乔伊?特伦斯指出,如果你提供了一个“可读且可复制的代码”在这方面更容易获得帮助。BehaviorSubject的listen方法使用函数,您可以在传递给listen方法的函数中调用setState。listen方法中带有setState的BehaviorSubject示例可在此处找到:
 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;