使用EventChannel
从本机代码接收到一个事件。
内容是字符串,我想用SnackBar
来显示它。
但是Scaffold.of
返回null。而且我什么也没能得到BuildContext
创建的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) => {}
);
答案 0 :(得分: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()),
));
答案 1 :(得分: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'),
),
);
}
}