やりたいこと
上記のような、簡単なページを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(),
);
}
}