如何在EventChannel.listen的事件回调中显示SnackBar

问题描述 投票:3回答:2

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

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

Scaffold.of返回null。我发现没有什么能得到由BuildContext创造的ScaffoldWidget Build(...)

代码是这样的:

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

showMsg.receiveBroadcastStream().listen(
    (event) => setState(() {
        Scaffold.of(context).showSnackBar(new SnackBar(
            content: new Text(event.toString()),
        ));
    }),
    onError: (event) => {}
);
dart flutter
2个回答
2
投票

您将需要一个用于支架的钥匙,您可以使用它来获得脚手架的状态

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()),
));

0
投票
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'),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.