Flutter

Flutterの画面遷移|Navigator.pushとpopの基本

Flutterの画面遷移を初心者向けに解説します。Navigator.push、MaterialPageRoute、pop、値を渡す考え方、go_routerとの違いを整理します。

この記事の目次
  1. この記事の結論
  2. 2つ目の画面を用意する
  3. pushで進む
  4. popで戻る
  5. 値を渡す考え方
  6. 実装後に確認すること
  7. よくあるつまずき
  8. 次に読む記事
  9. まとめ

Flutterの画面遷移は、アプリらしい体験を作るための基本です。最初はNavigator.pushで次の画面へ進み、Navigator.popで戻る流れを理解すれば十分です。

この記事の結論

小さなアプリではNavigator.pushとpopから始めます。URL、ディープリンク、認証リダイレクトが必要になったらgo_routerを検討します。

2つ目の画面を用意する

class DetailPage extends StatelessWidget {
  const DetailPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("詳細")),
      body: const Center(child: Text("Detail")),
    );
  }
}

pushで進む

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => const DetailPage(),
  ),
);

popで戻る

Navigator.of(context).pop();

値を渡す考え方

詳細画面へIDやタイトルを渡したい場合は、コンストラクタ引数として受け取る形から始めると分かりやすいです。

class DetailPage extends StatelessWidget {
  const DetailPage({super.key, required this.title});

  final String title;

  @override
  Widget build(BuildContext context) {
    return Text(title);
  }
}

実装後に確認すること

  • push先のWidgetが意図通りか
  • 戻る導線があるか
  • 渡す値をコンストラクタで明示しているか
  • 複雑になったらgo_routerへ分ける判断ができるか

よくあるつまずき

  • contextが使えない場所でNavigatorを呼ぶ
  • 戻る必要がない遷移までpushする
  • 画面間で大きなオブジェクトを渡しすぎる
  • URL対応が必要なのにNavigatorだけで押し切る

次に読む記事

まとめ

Flutterの画面遷移はNavigator.pushとpopから始めるのが分かりやすいです。複雑なURL設計が必要になったらgo_routerへ進みましょう。