Open drawer on clicking AppBar

前端 未结 3 653
你的背包
你的背包 2020-12-05 02:06

If you create an Scafold there is an option for drawer. If you now create this drawer you get automaticly the menu icon on the leading position of the appbar. But i want an

相关标签:
3条回答
  • 2020-12-05 02:46

    you need initialize scaffoldKey after that,

    Open drawer and close drawer

     GestureDetector(
              onTap: () {
                if(scaffoldKey.currentState.isDrawerOpen){
                  scaffoldKey.currentState.openEndDrawer();
                }else{
                  scaffoldKey.currentState.openDrawer();
                }
              },
              child:  LeadingIcon(icon: Icons.menu),//your button
            ),
    
    0 讨论(0)
  • 2020-12-05 02:48

    Use a Key in your Scaffold and show the drawer by calling myKey.currentState.openDrawer(), here is a working code:

    import "package:flutter/material.dart";
    
    class Test extends StatefulWidget {
      @override
      _TestState createState() => new _TestState();
    }
    
    class _TestState extends State<Test> {
      final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          key: _scaffoldKey,
          drawer: new Drawer(),
          appBar: new AppBar(
            leading: new IconButton(
              icon: new Icon(Icons.settings),
              onPressed: () => _scaffoldKey.currentState.openDrawer(),
            ),
          ),
        );
      }
    }
    
    
    0 讨论(0)
  • 2020-12-05 03:00

    Alternative to the accepted answer which does not require a GlobalKey:

    class _TestState extends State<Test> {
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          drawer: new Drawer(),
          appBar: new AppBar(
            leading: Builder(
            builder: (context) => IconButton(
                icon: new Icon(Icons.settings),
                onPressed: () => Scaffold.of(context).openDrawer(),
              ),
            ),
          ),
        );
      }
    }
    
    0 讨论(0)
提交回复
热议问题