How to hide drawer in flutter after changing Scaffold.body value
Are you using exactly Navigator.of(context).pop()
? I cannot reproduce your problem, can you post a minimal example to reproduce it?
The following code works as expected: the settings button pops away the drawer, while the other don't.
class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => new _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> { String text = "Initial Text"; @override Widget build(BuildContext context) { return new Scaffold( drawer: new Drawer( child: new ListView( children: <Widget>[ new Container(child: new DrawerHeader(child: new Container())), new Container ( child: new Column( children: <Widget>[ new ListTile(leading: new Icon(Icons.info), onTap:(){ setState((){ text = "info pressed"; }); } ), new ListTile(leading: new Icon(Icons.save), onTap:(){ setState((){ text = "save pressed"; }); } ), new ListTile(leading: new Icon(Icons.settings), onTap:(){ setState((){ text = "settings pressed"; }); Navigator.of(context).pop(); } ), ] ), ) ], ), ), appBar: new AppBar(title: new Text("Test Page"),), body: new Center(child: new Text((text)), )); }}
create scaffoldKey
close drawer
_scaffoldKey.currentState.openEndDrawer(),
open drawer
scaffoldKey.currentState.openDrawer(),
Example
InkWell( onTap: ()=> widget.scaffoldKey.currentState.openDrawer(), child: Icon( Icons.menu, size: 38, color: Color(0xFFFFFFFF), ), ),
If you are using a MaterialApp you need to use Scaffold.of(context).openEndDrawer() that way you do not need to create a GlobalKey.
class Menu extends StatelessWidget { const Menu({ Key key, }) : super(key: key); @override Widget build(BuildContext context) { return ListView( padding: EdgeInsets.zero, children: [ FlatButton( onPressed: () { Navigator.of(context).pushNamed('/'); Scaffold.of(context).openEndDrawer(); }, child: ListTile( leading: Icon(Icons.home), title: Text('Home'), ), ), FlatButton( onPressed: () { Navigator.of(context).pushNamed('/about'); Scaffold.of(context).openEndDrawer(); }, child: ListTile( leading: Icon(Icons.question_answer), title: Text('About'), ), ), ], ); }}