はじめに
Flutterを使ってアプリを開発していると、複数の画面(ページ)間を遷移させる必要が出てきます。Flutterでは、Navigatorを使って画面遷移を管理しますが、毎回、画面遷移の方法を調べていたら効率が悪いです。
本記事では、Flutterでの画面遷移の基本的なテンプレートを紹介します。3つの画面を遷移するサンプルを使って、基本的な画面遷移の流れを理解できるように構成しています。
実装
以下のコードサンプルでは、3ページの遷移を実現しています。各画面にボタンが配置されており、それをタップすることで次の画面に遷移します。
1. main.dart
- アプリのエントリーポイント
import 'package:flutter/material.dart';
import 'second.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 「Next」ボタンが押されたときに、SecondPageへ遷移
Navigator.of(context).push(MaterialPageRoute(builder: (context) {
return const SecondPage();
}));
},
child: const Text("Next")
),
),
);
}
}
-
Navigator.of(context).push()
: 次のページ(SecondPage
)に遷移するためのコードです。MaterialPageRoute
を使って遷移先の画面を指定します。
2. second.dart
- 2番目の画面
import 'package:flutter/material.dart';
import 'third.dart';
class SecondPage extends StatelessWidget {
const SecondPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text("Flutter Demo Second Page"),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 「Next」ボタンが押されたときに、ThirdPageへ遷移
Navigator.of(context).push(MaterialPageRoute(builder: (context) {
return const ThirdPage();
}));
},
child: const Text("Next")
),
),
);
}
}
-
Navigator.of(context).push()
: このコードで、次の画面(ThirdPage
)へ遷移します。
3. third.dart
- 3番目の画面
import 'package:flutter/material.dart';
class ThirdPage extends StatelessWidget {
const ThirdPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text("Flutter Demo Third Page"),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 「Back」ボタンが押されたときに、前の画面に戻る
Navigator.of(context).pop();
},
child: const Text("Back")
),
),
);
}
}
-
Navigator.of(context).pop()
: このコードは、現在の画面(ThirdPage
)をポップして前の画面に戻るために使用します。
画面遷移の流れ
- アプリケーション起動時、最初に表示されるのは
MyHomePage
です。この画面には「Next」ボタンがあります。 - ユーザーが「Next」ボタンを押すと、
SecondPage
に遷移します。 -
SecondPage
に到達すると、再び「Next」ボタンが表示され、それを押すとThirdPage
に遷移します。 - 最後に、
ThirdPage
では「Back」ボタンを押すことで、前の画面(SecondPage
)に戻ることができます。
おわりに
Flutterでの画面遷移は、Navigator
とMaterialPageRoute
を組み合わせることで非常に簡単に実現できます。このテンプレートを基に、より複雑な画面遷移や状態管理を追加することができます。
-
push
: 新しい画面をStackに追加して遷移します。 -
pop
: 現在の画面をStackから削除して、前の画面に戻ります。
Flutterでの画面遷移をさらに深く学び、アプリ開発のスキルを向上させていきましょう!