Dart / Flutterで特定の画面を削除する

特定の画面を削除する

消したいシーンは名前を付けて遷移する

// 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),
);

引数のアンダーバーは特に意味はないです。avarでも大丈夫です。
引数は使わないぞ!という意思表示としてアンダーバーにするとgoodらしい
公式


Flutter開発で知らないと損すること Flutter開発で知らないと損すること

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です