使用 EventChannel
从 native 代码接收事件。
内容是字符串,我想用 SnackBar
显示它。
但是 Scaffold.of
返回 null。并且我没有找到由 Widget Build(...)
创建的 Scaffold
的 BuildContext
。
代码是这样的:
@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/