我正在使用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;
答案 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,然后在问题的代码中调用该函数。