如何在Flutter中显示流中的Snackbar?

时间:2019-03-06 08:21:10

标签: flutter stream

一旦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

1 个答案:

答案 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();
}