web-dev-qa-db-ja.com

Scaffold.bodyの値を変更した後、引き出しをフラッターで非表示にする方法

私はこの質問の方法を使用して、足場の本体をフラッターで変更しています。

Flutter Drawerウィジェット-Scaffold.bodyコンテンツを変更

説明されている方法は完全に機能します。ここで、ユーザーがアイテムの1つをタップした後、引き出しだけを自動的に閉じたいと思います。

Navigator.pop()メソッドを使用してみましたが、ドロワーだけでなく画面全体がポップされます。それは私に完全に黒い画面を残します。

助言がありますか?

5
juanarzac

正確に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)),
        ));
  }
}
4
Fabio Veronese

足場キーを作成する

引き出しを閉じる

 _scaffoldKey.currentState.openEndDrawer(),

引き出しを開く

scaffoldKey.currentState.openDrawer(),

     InkWell(
        onTap: ()=> widget.scaffoldKey.currentState.openDrawer(),
        child: Icon(
          Icons.menu,
          size: 38,
          color: Color(0xFFFFFFFF),
        ),
      ), 
5
BloodLoss