如何解决如何在抽屉中使用DrawerControllerState?
最小代码:
void main() => runApp(MaterialApp(home: MainPage()));
class MainPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),drawer: MyDrawer(),);
}
}
class MyDrawer extends StatelessWidget {
final _drawerKey = GlobalKey<DrawerControllerState>();
@override
Widget build(BuildContext context) {
return Drawer(
key: _drawerKey,child: RaisedButton(
onpressed: () => print(_drawerKey.currentState),// Prints null
child: Text('Show Dialog'),),);
}
}
当我按下按钮时,它会打印null
,那么使用DrawerControllerState
的正确方法是什么?
解决方法
看,问题在于您没有正确使用key
。首先,为了获得Drawer
的状态,您需要拥有ScaffoldState
而不是DrawerControllerState
类型的密钥。
使用ScaffoldState.currentState
,您将获取数据。另外,如果您想查看抽屉是打开还是关闭。您可以像这样使用它:
ScaffoldState.currentState.isDrawerOpen
有两种方法可以做到这一点:
1。夸张地声明GlobalKey以便在任何地方访问它
void main() => runApp(MaterialApp(home: MainPage()));
// declare it globally or make your drawer inside the MainPage only
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
class MainPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,// <-- Use your key here not for drawer
appBar: AppBar(),drawer: MyDrawer(),);
}
}
class MyDrawer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Drawer(
child: RaisedButton(
onPressed: () => print(_scaffoldKey.currentState.isDrawerOpen),// <-- prints true,when open
child: Text('Show Dialog'),)
);
}
}
2。将抽屉仅放在MainPage内。易于访问
class MainPage extends StatelessWidget {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
Drawer get _drawer => Drawer(
child: RaisedButton(
onPressed: () => print(_scaffoldKey.currentState.isDrawerOpen),// <-- prints true when opened
child: Text('Show Dialog'),)
);
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,// <-- Using Key for Scaffold
appBar: AppBar(),drawer: _drawer
);
}
}
将GlobalKey
从MainPage
传递到MyDrawer
将无济于事。你可以玩。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。