Flutterのルーティングライブラリ「AutoRoute」には、画面を戻る・閉じる操作(ポップ)に複数のメソッドがあります。
それぞれの特徴を理解することで、画面遷移の挙動をより細かく制御できます。
pop()概要
ナビゲーションスタックの一番上の画面を必ず戻す(閉じる)基本的なメソッド。
挙動
スタックに戻れる画面があれば1つ戻る。
戻れない場合は例外を投げる可能性あり。
Flutterの WillPopScope ウィジェットによる戻るキャンセル(popScope)は尊重されるため、WillPopScope が戻りを拒否すると戻れない。
使いどころ
基本的な戻る操作。
ユーザーの戻る意図が妨げられない前提の画面で使う。
maybePop()概要
戻れる場合は戻り、戻れない場合は何もしない安全なメソッド。
挙動
スタックが戻れる状態なら戻る。
戻れない場合は無視し、例外は起きない。
戻りの可否をboolで返す。
WillPopScope による戻るキャンセル判定も尊重する。
使いどころ
戻れない場合のエラーを防ぎたいとき。
戻りの可否を確認したい場合。
Androidの戻るボタン処理など、戻れるときだけ戻す運用。
popForced()概要
特定の画面(BuildContextに紐づく)を強制的に閉じるメソッド。
さらに、WillPopScope(popScope)の戻るキャンセル判定を無視して画面を閉じる特徴を持つ。
挙動
スタックのトップでなくても、そのコンテキストの画面を強制的に閉じる。
WillPopScopeで戻る操作を拒否していても無視し閉じる。
状態保存やキャンセル処理がスキップされる可能性があるため注意が必要。
使いどころ
通常の戻る操作では閉じられない画面を強制的に閉じたい場合。
モーダルやネストした画面を安全性より優先して閉じる必要があるとき。
多用は推奨されない。
通常の戻る操作は pop() または maybePop() を使い、WillPopScope の判定を尊重する。
戻る操作をキャンセルしたい画面では WillPopScope を使い、誤操作防止ができる。
どうしても戻る操作をキャンセルしている画面を閉じたい場合は popForced() を使うが、状態保存が飛ぶ恐れがあるので注意。
popForced() は特殊用途向けの最終手段的なメソッドと考えるべき。