首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在回调SnackBar onEvent of EventChannel.listen中显示EventChannel.listen

如何在回调SnackBar onEvent of EventChannel.listen中显示EventChannel.listen
EN

Stack Overflow用户
提问于 2018-09-13 06:50:39
回答 2查看 883关注 0票数 4

使用EventChannel从本机代码接收事件。

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

但是Scaffold.of返回null。我没有发现任何东西可以让BuildContext of ScaffoldWidget Build(...)创建。

代码如下:

代码语言:javascript
复制
@override
void initState() {
super.initState();

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-13 08:36:14

编辑/更新应答

使用新的颤振更新,您现在必须使用ScaffoldMessenger来显示SnackBar

代码语言:javascript
复制
ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text('test'),
        ),
      );

我正在使用下面的颤振版本和频道

1.24.0-10.1.前置·频道开发

旧答案

您将需要一个用于Scaffold的密钥,您可以使用该密钥获取Scaffold的状态。

代码语言:javascript
复制
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

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

代码语言:javascript
复制
return new Scaffold(
      key: _scaffoldKey,
      ...,
);

使用此key,您可以访问Scaffold的状态。

代码语言:javascript
复制
_scaffoldKey.currentState.showSnackBar(new SnackBar(
            content: new Text(event.toString()),
));
票数 4
EN

Stack Overflow用户

发布于 2018-09-13 07:07:28

代码语言:javascript
复制
import 'package:flutter/material.dart';

void main() => runApp(SnackBarExample());

class SnackBarExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SnackBar Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('SnackBar Example'),
        ),
        body: SnackBarPage(),
      ),
    );
  }
}

class SnackBarPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: RaisedButton(
        onPressed: () {
          final snackBar = SnackBar(
            content: Text('This is a SnackBar!'),
            action: SnackBarAction(
              label: 'Action',
              onPressed: () {
                // Some code to action.
              },
            ),
          );

          Scaffold.of(context).showSnackBar(snackBar);
        },
        child: Text('Showing SnackBar'),
      ),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52308087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档