by Kota Hayashi
各パッケージの記法で、元となるDartコードを記述する
以下はどのパッケージでも共通 アノテーションの追加(@freezedなど) アノテーションが定義されたライブラリのimport partディレクティブの記述(一般的には.g.dart、freezedは.freezed.dart) アノテーションの正体 アノテーションはクラスとして定義されている 生成パッケージはアノテーションがついているクラス等を生成元コードを見つける よく使う小文字で始まる@freezedは引数を何も指定しないFreezedクラスを定数として定義したもの アノテーションが定義されたライブラリのimport 生成パッケージはアノテーション等を定義したパッケージと生成ロジックが書かれたパッケージに分かれていることが多い freezedなら ロジック:freezed アノテーション:freezed_annotation json_serializableなら ロジック:json_serializable アノテーション:json_annotation ロジックのパッケージは生成時しか使わないのでdev_dependencies、アノテーションのパッケージはアプリケーションのコードにも含むのでdependenciesに記述する partディレクティブの記述 part 'person.g.dart';、part 'person.freezed.dart'; part と part of がセットで使われる 複数のファイルを同一ライブラリとして扱えるようになる。同じライブラリとすればprivateなクラスを参照したりできる freezedなら生成元コードでprivateになってる_$Personや_Personがfreezed.dartの方に生成される ちゃんと生成側はpart ofが使われていることがわかる
build_runnerのコマンド実行
build_runnerパッケージがdev_dependenciesに追加されていることでdart runコマンドが実行できる dart run build_runner build 単発ビルド dart run build_runner watch ファイルの変更を監視して、必要に応じて何度もビルド build.yaml freezedやjson_serializableはbuild_configパッケージが使われており、build.yamlで生成のオプションを設定できる よく使う設定 generate_for build.yamlがデフォルトで用意してるオプション 正規表現で生成元のDartコードを限定する ディレクトリ構成的にモデルはここにしか置かないとか分かってる場合はこれで生成速度が上がる source_gen:combining_builderのignore_for_file source_genパッケージはbuildやanalyerをまとめて使いやすくするパッケージ ignore_for_fileオプションも便利機能の一つ 生成ファイルにlintの無効化設定を追加してくれる ゆめみFlutterテンプレートプロジェクトの例https://github.com/yumemi-inc/flutter-mobile-project-template/blob/main/apps/app/build.yaml (type=lintがあるのにduplicate_ignoreをしてるのは、デフォルトでtype=lintを追加してくれるパッケージで重複が起きるため)