Flutterとは?開発環境を構築してみようでは、空の初期プロジェクトを作成しました。初期プロジェクトには以下のようにHello World!と表示させるコードがmain.dartに書かれています。
main.dartに書かれている内容は以下の通りです。はじめて見るとなんのこっちゃという感じです。
import 'package:flutter/material.dart';
void main() {
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: Center(
child: Text('Hello World!'),
),
),
);
}
}
main.dartとは
Flutterアプリケーションを開発する場合、ソースコードは主にlib
フォルダ内に書かれます。main.dart
はその中でも特殊なDartファイルです。
main.dart
は、Flutterアプリケーションのエントリーポイントです。アプリケーションが実行されると、Flutterはmain.dart
を読み込んで、アプリケーションの初期化を行います。そのため、main()
メソッドを定義してアプリケーションを開始するための準備をしたり、ルートとなるウィジェットを構築するコードを書きます。
初期プロジェクトのmain.dartを解説
main.dartの記述をひとつずつ解説していきます。
import 'package:flutter/material.dart';
このコードはFlutterの標準的なウィジェットを多数含んだmaterial.dartというパッケージをインポートしています。例えば、ボタン、テキストフィールド、プログレスインジケータ、チェックボックス、ラジオボタンといったウィジェットが含まれています。
void main() {
runApp(const MainApp());
}
このコードは、Flutterアプリケーションのエントリーポイントであるmain
関数を定義しています。main
関数は、アプリケーションの起動時に最初に実行されます。
runApp
関数は、アプリケーションのルートウィジェットを起動するために使われています。そのルートウィジェットがMainAppです。MainAppの定義は後ほど出てきます。
constを使っているのでMainAppが定数であることが分かります。constを使ってウィジェットがが不変であることを保証するとパフォーマンスが向上します。ただ、ウィジェット内で変数を持っている場合など動的な要素を持つ場合はconstは使用しません。
runApp関数で呼び出すMainApp
クラスを定義しています。
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
// 省略
}
}
Flutterでは、UI要素であるウィジェットは、状態を持たない(StatelessWidget)か、状態を持つ(StatefulWidget)の2種類に分けられます。ルートウィジェットは状態を持たないStatelessWidgetでなければならないため、MainAppはStatelessWidgetを継承しています。
build
関数は、このウィジェットのビューを作成するために呼び出されます。MainApp
は、build
関数でMaterialApp
を返すためのウィジェットであるため、MaterialApp
が実際のルートウィジェットといえます。
return const MaterialApp(
home: Scaffold(
body: Center(
child: Text('Hello World!'),
),
),
);
このコードは、MaterialApp
ウィジェットを作成しています。MaterialApp
は、Flutterでマテリアルデザインを使用してアプリケーションを作成するためのウィジェットです。home
引数は、アプリケーションのホーム画面となるウィジェットを指定します。ここでは、Scaffold
ウィジェットが指定されています。
Scaffold
は、アプリケーションの基本的な UI 要素を作れるウィジェットです。AppBarという引数を使ってアプリケーションバーを指定したり、body引数でアプリケーションのメインコンテンツに表示するウィジェットを指定できます。ここでは、body
引数にCenter
ウィジェットが指定されています。
Centerは、child引数で指定した子要素を中央に配置するウィジェットです。このコードではTextウィジェットが指定されているので、Hello World!
というテキストが中央に表示されています。
以上がmain.dartの解説となります。Flutterのアプリがどのように構成されているかなんとなくつかめたのではないかと思います。