dart - 如何在 EventChannel.listen 的回调 onEvent 中显示 SnackBar

标签 dart flutter

使用 EventChannel 从 native 代码接收事件。

内容是字符串,我想用 SnackBar 显示它。

但是 Scaffold.of 返回 null。并且我没有找到由 Widget Build(...) 创建的 ScaffoldBuildContext

代码是这样的:

@override
void initState() {
super.initState();

showMsg.receiveBroadcastStream().listen(
    (event) => setState(() {
        Scaffold.of(context).showSnackBar(new SnackBar(
            content: new Text(event.toString()),
        ));
    }),
    onError: (event) => {}
);

最佳答案

编辑/更新答案

随着新的 Flutter 更新,您现在必须使用 ScaffoldMessenger 来显示 SnackBar

ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text('test'),
        ),
      );

我使用的是低于 Flutter 的版本和 channel

1.24.0-10.1.pre • channel dev •

老答案

您需要一个 Scaffold 的 key ,您可以使用它来获取 Scaffold 的状态

final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

现在在您的 build 方法中,它必须返回脚手架。 在 Scaffold 中分配 key: _scaffoldKey,

return new Scaffold(
      key: _scaffoldKey,
      ...,
);

使用这个key你可以访问Scaffold的状态。

_scaffoldKey.currentState.showSnackBar(new SnackBar(
            content: new Text(event.toString()),
));

关于dart - 如何在 EventChannel.listen 的回调 onEvent 中显示 SnackBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52308087/

相关文章:

Dart:以编程方式向 DivElement 添加子元素

flutter - flutter 怎么办

dart - Dart 中具有定义签名的函数列表

flutter - flutter 中的BLOC模式是什么?

flutter - 如何在 flutter 中将颜色应用于多色 svg?

spring-boot - 带有 Spring-boot 后端的 Flutter websocket

dart - Flutter-像巫师学校App一样的遮蔽效果

firebase - 如何使用 flutter 和 firebase 将 'Read' 功能添加到消息传递应用程序中

flutter - 错误未处理的异常:切换另一个BottomNavigationBar时,在dispose()之后调用setState()

unit-testing - Dart 测试大致相等