使用EventChannel从本机代码接收事件。
内容是字符串,我想用SnackBar显示它。
但是Scaffold.of返回null。我没有发现任何东西可以让BuildContext of Scaffold由Widget Build(...)创建。
代码如下:
@override
void initState() {
super.initState();
showMsg.receiveBroadcastStream().listen(
(event) => setState(() {
Scaffold.of(context).showSnackBar(new SnackBar(
content: new Text(event.toString()),
));
}),
onError: (event) => {}
);发布于 2018-09-13 08:36:14
编辑/更新应答
使用新的颤振更新,您现在必须使用ScaffoldMessenger来显示SnackBar。
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('test'),
),
);我正在使用下面的颤振版本和频道
1.24.0-10.1.前置·频道开发
旧答案
您将需要一个用于Scaffold的密钥,您可以使用该密钥获取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()),
));发布于 2018-09-13 07:07:28
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'),
),
);
}
}https://stackoverflow.com/questions/52308087
复制相似问题