0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FlutterAdvent Calendar 2024

Day 9

【Flutter】画面遷移のテンプレート

Last updated at Posted at 2024-12-08

はじめに

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)をポップして前の画面に戻るために使用します。

画面遷移の流れ

  1. アプリケーション起動時、最初に表示されるのはMyHomePageです。この画面には「Next」ボタンがあります。
  2. ユーザーが「Next」ボタンを押すと、SecondPageに遷移します。
  3. SecondPageに到達すると、再び「Next」ボタンが表示され、それを押すとThirdPageに遷移します。
  4. 最後に、ThirdPageでは「Back」ボタンを押すことで、前の画面(SecondPage)に戻ることができます。

おわりに

Flutterでの画面遷移は、NavigatorMaterialPageRouteを組み合わせることで非常に簡単に実現できます。このテンプレートを基に、より複雑な画面遷移や状態管理を追加することができます。

  • push: 新しい画面をStackに追加して遷移します。
  • pop: 現在の画面をStackから削除して、前の画面に戻ります。

Flutterでの画面遷移をさらに深く学び、アプリ開発のスキルを向上させていきましょう!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?