代码之家  ›  专栏  ›  技术社区  ›  juanarzac

如何在更换脚手架后隐藏抽屉。正文值

  •  8
  • juanarzac  · 技术社区  · 7 年前

    我正在使用此问题中的方法更改颤振脚手架的主体:

    Flutter Drawer Widget - change Scaffold.body content

    所描述的方法非常有效。现在,我只希望抽屉在用户点击其中一个项目后自动关闭。

    我试着使用导航器。方法,但它会弹出整个屏幕,而不仅仅是抽屉。它给我留下了一个完全黑屏。

    有什么建议吗?

    4 回复  |  直到 7 年前
        1
  •  13
  •   Fabio Veronese    7 年前

    你使用的是 Navigator.of(context).pop() ? 我无法再现你的问题,你能举一个最小的例子来再现它吗?

    以下代码按预期工作:设置按钮弹出抽屉,而另一个没有弹出。

    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)),
            ));
      }
    }
    
        2
  •  6
  •   BIS Tech    5 年前

    创建脚手架键

    关闭抽屉

     _scaffoldKey.currentState.openEndDrawer(),
    

    打开抽屉

    scaffoldKey.currentState.openDrawer(),
    

    实例

         InkWell(
            onTap: ()=> widget.scaffoldKey.currentState.openDrawer(),
            child: Icon(
              Icons.menu,
              size: 38,
              color: Color(0xFFFFFFFF),
            ),
          ), 
    
        3
  •  4
  •   Raptor121_SA    4 年前

    如果您使用的是MaterialApp,则需要使用脚手架。of(上下文)。openEndDrawer(),这样就不需要创建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'),
              ),
            ),
          ],
        );
      }
    }
    
        4
  •  0
  •   whoguri    3 年前

    简单地说:

    ListTile(
      title: const Text('Item 1'),
      onTap: () {
        // Update the state of the app
        // ...
        // Then close the drawer
        Navigator.pop(context);
      },
    ),