一旦SnackBar
的{{1}}发送新的Stream
,我想显示String
。
我试图将String
放在StreamBuilder
内,以便能够呼叫StatefulWidget
(因为现在是另一个Scaffold.of()
)。但随后出现此错误:
在构建StreamBuilder(dirty,state:时抛出了以下断言: _StreamBuilderBaseState>#7f258): 在构建期间调用setState()或markNeedsBuild()。 无法将该Scaffold小部件标记为需要构建,因为该框架已经在 构建小部件的过程。可以将小部件标记为在构建阶段需要构建 仅当其祖先之一正在建造时。允许此异常是因为框架 在子代之前构建父窗口小部件,这意味着将始终构建脏后代。 否则,框架在此构建阶段可能不会访问此窗口小部件。 调用setState()或markNeedsBuild()的小部件为: 支架(依赖性:[_LocalizationsScope- [GlobalKey#0e1f6],方向性,_InheritedTheme, MediaQuery],状态:ScaffoldState#3f2aa(代码:跟踪2个代码)) 进行违规呼叫时当前正在构建的小部件为: StreamBuilder(脏,状态:_StreamBuilderBaseState>#7f258)
我该如何解决?
这是显示问题的简单代码段:
context
答案 0 :(得分:1)
无需使用StreamBuilder
。无论如何,显示SnackBar
必须在同步build()
执行之外完成。
@override
void initState() {
super.initState();
status.stream.forEach((e) =>
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text(e))));
}
@override
void dispose() {
status.close();
super.dispose();
}