我有这个:
final GlobalKey<ScaffoldState> _scaffoldkey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
key: _scaffoldkey,
drawer: Menu(),
appBar: AppBar(
title: Container(
child: Text('Dashboard'),
),
bottom: TabBar(
tabs: <Widget>[
...
],
),
),
body: TabBarView(
children: <Widget>[
...
],
),
),
);
}
}
现在,drawer: Menu()
是从另一个menu.dart
文件导入的,如下所示:
class Menu extends StatelessWidget {
final GlobalKey<ScaffoldState> drawerKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Drawer(
key: drawerKey,
child: new ListView(
children: <Widget>[
new ListTile(
dense: true,
title: new Text('My Text'),
onTap: () {
// On tap this, I want to show a snackbar.
scaffoldKey.currentState.showSnackBar(showSnack('Error. Could not log out'));
},
),
],
),
);
}
}
使用上面的方法,我得到了
NoSuchMethodError: The method 'showSnackBar' was called on null.
个
一个简单的解决方案是将全部menu.dart
个内容直接塞进drawer: ...
.
我正在考虑的另一种方式是能够引用父脚手架来显示快餐栏.
怎样才能做到这一点呢?
为什么人们甚至不能在弗利特的任何地方直接调用snackbar,强制它必须通过脚手架来完成?为什么?