目次
特定の画面を削除する
消したいシーンは名前を付けて遷移する
// ScreenAクラス
Navigator.push(
context,
MaterialPageRoute(
settings: const RouteSettings(name: 'screenB'),
builder: (context) => const ScreenB(),
),
);
名前を付けたシーンを削除する
// ScreenBクラス
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => ScreenC(),
(Route<dynamic> route) {
// スタックされたすべてのシーンが入ってくる!
// 名前を付けたシーンだった場合削除する
if (route.settings.name != null && route.settings.name! == 'screenB') {
return false;
}
// それ以外は削除しない
return true;
},
);
ScreenC
に遷移する前にScreenB
を削除している、
ので、
ScreenC
で戻るを押した場合ScreenA
に戻る
ただ純粋に今の例のようなことをしたい場合は以下のほうが適切
シーン遷移で戻れないように置き換える
ScreenB
クラスをScreenC
クラスに置き換える
// ScreenBクラス
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => ScreenC(),
),
);
すべての画面を削除して遷移
ちなみに、すべての画面を削除して遷移はこう
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => ScreenC(),
(_) => false),
);
引数のアンダーバーは特に意味はないです。a
とvar
でも大丈夫です。
引数は使わないぞ!という意思表示としてアンダーバーにするとgoodらしい
公式
Flutter開発で知らないと損すること