How to hide drawer in flutter after changing Scaffold.body value How to hide drawer in flutter after changing Scaffold.body value dart dart

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'),          ),        ),      ],    );  }}