web-dev-qa-db-ja.com

フラッターでAppBarの戻るボタンをインターセプトする方法

インターセプター https://pub.dartlang.org/packages/back_button_interceptor を使用して、ページ1がページ2から戻ったときにメソッドを実行しています。

デバイスの戻るボタンを使用して2ページから1ページに戻ると、メソッドが実行されます。

しかし、appBarの矢印ボタンを使用して2ページから1ページに戻った場合、メソッドを実行できません。

戻る矢印ボタンの機能をデバイスの戻るボタンにデフォルト設定するにはどうすればよいですか?

3
ningomba 2.0

ページ2のスキャフォールドをWillPopScopeで囲み、onWillPopをfalseに設定して、ページがシステムによってポップされないようにしてから、独自の戻るボタンをアプリバーの主要ウィジェットに追加して、そこでポップを実行できます。

@override
Widget build(BuildContext context) {
  return new WillPopScope(
    onWillPop: () async => false,
    child: new Scaffold(
      appBar: new AppBar(
        title: new Text("data"),
        leading: new IconButton(
          icon: new Icon(Icons.ac_unit),
          onPressed: () => Navigator.of(context).pop(),
        ),
      ),
    ),
  );
}

この投稿 からの回答のコード

編集:ナビゲーションを制御するためのページ2への追加

上記のコードに加えて、次のコードをページ2に追加します。変更

Navigator.of(context).pop() 

Navigator.of(context).pop('upload_files')

次に、ナビゲートするページ1で、ナビゲーションを待機し、ページ2のポップから返された結果を使用してロジックを実行します

var navigationResult = await Navigator.Push(
        context,
        new MaterialPageRoute(
            builder: (context) => Page2()));


 if(navigationResult == 'upload_files') {
    uploadFiles(); // Perform your custom functionality here.
 }
8
Filled Stacks