l

o

a

d

i

n

g

.

.

.

短期にFlutterを学習するブログ STEP5:画面遷移・ルーティング

2026/02/24

Flutter プログラミング 学習

t f B! P L
eyecatch 前のSTEPでは、単一画面の中で状態を持ち、入力に応じてUIが変わるところまでを扱ってきました。 しかし実際の業務アプリでは、一覧 → 詳細 → 編集、あるいは検索 → 結果 → 登録といったように、画面遷移を前提とした構造が必ず登場します。 このSTEPでは、Flutterにおける画面遷移の基本を押さえつつ、「なぜこの設計がWebや業務アプリと相性が良いのか」を整理していきます。

Navigatorの基本

Flutterの画面遷移は、Navigator というスタック構造を使って管理されます。 考え方としてはとてもシンプルで、「画面をスタックに積む」「戻るときはスタックから外す」というモデルです。 Navigator.push を呼ぶと新しい画面が前面に表示され、Navigator.pop を呼ぶと一つ前の画面に戻ります。 この構造は、Webの履歴スタックやモバイルOSの画面遷移とほぼ同じで、余計な概念を覚えなくても直感的に理解できます。 重要なのは、画面はただの "Widget" であるという点です。 特別なViewクラスやControllerが存在するわけではなく、これまで作ってきたWidgetをそのまま「次の画面」として扱えます。

画面間データ受け渡し

業務アプリでは、画面遷移と同時にデータを渡すケースがほとんどです。 例えば、一覧画面で選択したIDを詳細画面に渡す、といった場面です。 Flutterでは、このデータ受け渡しをコンストラクタ引数で行うのが基本になります。 画面遷移時に必要なデータを明示的に渡すため、「どの画面が何に依存しているのか」がコードから一目で分かります。 これは、グローバル変数や暗黙的な状態に頼りがちな設計と比べて、保守性が非常に高い点です。 PHPやJavaScriptで「この画面、どこから値が来ているんだっけ?」となった経験がある人ほど、この明示性のありがたさを感じるはずです。

Web対応時の注意点

FlutterはモバイルだけでなくWebにも対応していますが、画面遷移に関して一つ意識しておきたい点があります。 それは、URLと画面状態の関係です。 Navigator をそのまま使った場合、URLは変わらずに画面だけが切り替わります。 業務システムの管理画面や社内ツールであれば問題にならないことも多いですが、URL共有やリロード耐性が必要な場合は、ルーティング設計を一段階進める必要があります。 このシリーズではまず「仕事で使える最短距離」を優先し、このSTEPではあえてシンプルなNavigator構成に留めます。 本格的なWebルーティングについては、後続ステップで整理する前提で問題ありません。

成果物:CRUD画面遷移構成

ここでは、一覧 → 詳細 → 戻る、という最小構成のCRUD風画面遷移を作ります。 ロジックを削ぎ落とし、「画面遷移の骨格」だけが見えるコードにしています。 lib/main.dart import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: ListScreen(), ); } } class ListScreen extends StatelessWidget { const ListScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('一覧画面')), body: ListView.builder( itemCount: 5, itemBuilder: (context, index) { return ListTile( title: Text('Item $index'), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (_) => DetailScreen(id: index), ), ); }, ); }, ), ); } } class DetailScreen extends StatelessWidget { final int id; const DetailScreen({super.key, required this.id}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('詳細画面')), body: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Text('選択されたID: $id'), const SizedBox(height: 16), ElevatedButton( onPressed: () => Navigator.pop(context), child: const Text('戻る'), ), ], ), ), ); } } このコードだけで、「一覧を選ぶ → 詳細を見る → 戻る」という業務アプリの基本動線が完成します。 画面が増えても、この構造をベースに積み上げていくだけで破綻しにくいのがFlutterの強みです。

このSTEPのまとめ

このSTEPでは、Flutterにおける画面遷移の基本を扱いました。 Navigatorの仕組みは驚くほど単純で、Widget設計の延長として自然に理解できます。 この時点で、
「単画面 + 状態管理」 「画面遷移 + データ受け渡し」
という、業務アプリに必要な最低限の構造はすでに揃っています。 次のSTEPでは、この画面構成を前提に、より実務に近い「状態のスコープ」や「画面を跨ぐ設計」を掘り下げていく予定です。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ