..

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。

  1. SettingsControllerを生成
  2. SettingsControllerに設定値を読み込む
  3. SettingsControllerを渡して、アプリ(MyApp)を開始

SettingsControllerとSettingsServiceは、src/settings以下に存在する

  • コントローラーは、データーとウィジェットとを結びつけるもの
  • コントローラーは、サービスを使って、データーを保存・復元する

SettingsControllerは、ChangeNotifierをmixinしている

  1. コンストラクターで、サービスを受け取り、プライベート変数に保持(公開しない)
  2. プロパティを保持(読み取りのみ可)
  3. プロパティの読込・変更は、サービスを通じてのみ行う
  4. 読込・変更時には、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インターフェースを実装したクラスを指定できる。

AnimatedBuilder class

ChangeNotifierもListenableインターフェースを実装しているため、ここに指定できる。

Listenable class

settingsControllerのnotifyListenersが呼ばれるたびに、builder以下(つまりMaterialApp全体)が再構築されることとなる。SettingsControllerが変更する対象がthemeModeであるため、これを変更したときにはアプリケーション全体を再構築する必要があるということだろう。
AnimatedBuilderのこのような使い方は、面白い。


とりあえず、ここまで。