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?

More than 3 years have passed since last update.

flutterでページ遷移を実装する(2つのページをボタンで行き来する)

Last updated at Posted at 2020-05-27

やりたいこと

image.png

上記のような、簡単なページを2つ作成し、それぞれのボタン押下で、行ったり来たり、という遷移をさせたい。
「サンプルページ2へ遷移する」ボタンを押すと、サンプルページ2が表示される。
「サンプルページ1へ遷移する」ボタンを押すと、サンプルページ1に戻ってくる。
アプリを起動して最初に表示されるのは「サンプルページ1」とする。

実装

main.dart

各ページの実装

サンプルページ1

//
// サンプルページ1
//
class SamplePage1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: const Text('サンプルページ1'), backgroundColor: Color.fromARGB(100, 0, 255, 0),),
          body: Center(
            child: RaisedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) {
                      return SamplePage2();
                    }
                  ),
                );
              },
              child: Text('サンプルページ2へ遷移する'),
            ),
          ),
        );
  }
}

サンプルページ2

//
// サンプルページ2
//
class SamplePage2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: const Text('サンプルページ2'), backgroundColor: Color.fromARGB(100, 255, 0, 0),),
          body: Center(
            child: RaisedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) {
                      return SamplePage1();
                    }
                  ),
                );
              },
              child: Text('サンプルページ1へ遷移する'),
            ),
          ),
        );
  }
}

解説

class SamplePage1 extends StatelessWidget {

のように、ウィジェット(クラス)を実装する。
これが1つのページに相当する。
クラス内で、ウィジェットをビルドし、
Scaffoldにて、ヘッダやボタンを実装していく。

appBar: AppBar(title: const Text('サンプルページ1'), backgroundColor: Color.fromARGB(100, 0, 255, 0),),

は、ページのヘッダ(緑色の部分)である。

child: RaisedButton(

は、ページ中央のボタンである。

onPressed: () {

が、押されたときの挙動を示し、

Navigator.push

にて、画面遷移を指定する。
遷移先は

Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) {
                      return SamplePage2();
                    }

のように、別のページ(ウィジェット)を指定する。
ここでは「SamplePage2」を指定しているので、サンプルページ2へ遷移する。

起動時に「サンプルページ1」を表示する設定

main.dart

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: SamplePage1(),
    );
  }
}

解説

runApp(MyApp());

にてMyAppが起動し、MyAppにて、

 home: SamplePage1(),

を指定しているので、アプリ起動時に、最初に表示されるページが「サンプルページ1」となる。

完成形 main.dart

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

//
// サンプルページ1
//
class SamplePage1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: const Text('サンプルページ1'), backgroundColor: Color.fromARGB(100, 0, 255, 0),),
          body: Center(
            child: RaisedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) {
                      return SamplePage2();
                    }
                  ),
                );
              },
              child: Text('サンプルページ2へ遷移する'),
            ),
          ),
        );
  }
}

//
// サンプルページ2
//
class SamplePage2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: const Text('サンプルページ2'), backgroundColor: Color.fromARGB(100, 255, 0, 0),),
          body: Center(
            child: RaisedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) {
                      return SamplePage1();
                    }
                  ),
                );
              },
              child: Text('サンプルページ1へ遷移する'),
            ),
          ),
        );
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: SamplePage1(),
    );
  }
}

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?