Flutter 2.5 スケルトンをながめる(1)
Flutter2.5からスケルトンが提供されるようになった。
【アップデート解説】Welcome to Flutter 2.5 !!
1. スケルトンの生成
Android Studioから新規プロジェクトを作成すると、カウンターアプリになってしまう。そこで、コマンドで生成する
% cd StudioProjects/
% flutter create -t skeleton my_app
これをAndroid Studioで開いてながめてみる。libディレクトリ以下は、下のように構成される。
├── main.dart
└── src
├── app.dart
├── localization
│ └── app_en.arb
├── sample_feature
│ ├── sample_item.dart
│ ├── sample_item_details_view.dart
│ └── sample_item_list_view.dart
└── settings
├── settings_controller.dart
├── settings_service.dart
└── settings_view.dart
2. main.dartとコントローラー・サービス
エントリーポイントはlibディレクトリ直下のmain.dart。
- SettingsControllerを生成
- SettingsControllerに設定値を読み込む
- SettingsControllerを渡して、アプリ(MyApp)を開始
SettingsControllerとSettingsServiceは、src/settings以下に存在する
- コントローラーは、データーとウィジェットとを結びつけるもの
- コントローラーは、サービスを使って、データーを保存・復元する
SettingsControllerは、ChangeNotifierをmixinしている
- コンストラクターで、サービスを受け取り、プライベート変数に保持(公開しない)
- プロパティを保持(読み取りのみ可)
- プロパティの読込・変更は、サービスを通じてのみ行う
- 読込・変更時には、notifyListeners関数を実行して、ウィジェットへの通知を行う
3. MyApp(1)
MyAppクラスは、src/app.dartに定義されている(srcディレクトリ直下のファイルは、app.dartのみ)
注目したいのは、build関数でMaterialAppをそのまま返さずに、AnimatedBuilderでラップして返しているところ。
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: settingsController,
builder: (BuildContext context, Widget? child) {
return MaterialApp(
AnimatedBuilderのanimationには、Animationだけでなく、Listenableインターフェースを実装したクラスを指定できる。
ChangeNotifierもListenableインターフェースを実装しているため、ここに指定できる。
settingsControllerのnotifyListenersが呼ばれるたびに、builder以下(つまりMaterialApp全体)が再構築されることとなる。SettingsControllerが変更する対象がthemeModeであるため、これを変更したときにはアプリケーション全体を再構築する必要があるということだろう。
AnimatedBuilderのこのような使い方は、面白い。
とりあえず、ここまで。