使用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) => {}
);
您将需要一个用于支架的钥匙,您可以使用它来获得脚手架的状态
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()),
));
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'),
),
);
}
}