Flutterで複数画面のアプリを作る時に、次の画面にNavigator.pushメソッドで遷移させて、前の画面の上に次の画面を開く状態にすると、
画面上部のアプリバー(AppBar)に、戻る矢印と、その戻る矢印を押すと前の画面に戻る(Navigator.pop)機能が自動的に実装されています。
しかし、逆に戻る矢印を押した際にいきなり前の画面に戻るのではなく、何か処理をしたい場合がありますが、その場合は上記の前の画面に戻る機能がコード上に存在しないため、そうした制御ができないというデメリットがあります。
そこで登場するのが「WillPopScope」で、
- 前の画面に戻る処理を一旦止めて(AppBarをWillPopScopeで包む)
- 何か他の処理を挟んだ上で(onWillPop属性の設定)、
- その処理が完了したら前の画面に戻るか、戻らないかの制御をかける(onWillPop属性の戻り値(bool)による制御)
ことができます(下の例では、前の画面に戻る前にダイアログを表示させる処理を行っています)
(詳しくは、以下の動画で解説していますので、よろしければご覧ください)