Flutter freezed_annotationを使ったmodel作成(@初心者)
freezed_annotationを使ったmodel作成
業務でAPIをつかった値を受け取るmodel作成をしました。
その際にfreezed_annotationを使ったので備忘録です。
Flutterの状態管理ライブラリであるRiverpodやFlutter Hooksと一緒に利用できます。
パッケージは下記
コードは下記の様に記載しました。下記はチートシートになります。
/// /model/user.dart
import 'package:freezed_annotation/freezed_annotation.dart';
part 'user.freezed.dart'; /// ※ ファイル名.freezed.dart
part 'user.g.dart'; /// ※ファイル名.g.dart
class User with _$User {
factory User({
(name: 'id') required String id,
(name: 'name') required String name,
(name: 'birthday') required String birthday,
(name: 'gender ') required int gender,
(name: 'email') required String email,
}) = _User;
/// JSON変換
factory User.fromJson(Map<String, Object?> json) =>
_$UserFromJson(json);
}
詳細説明
パッケージをimport
import 'package:freezed_annotation/freezed_annotation.dart';
freezed_annotationパッケージをインポートしています。このパッケージは、Dartで不変クラス(immutable class)を簡単に作成するためのアノテーションを提供します。
part
part 'user.freezed.dart';
part 'user.g.dart';
part 'user.freezed.dart';はfreezedパッケージによって自動生成されるコードを含むファイルを指定しています。
part 'user.g.dart';はjson_serializableパッケージによって自動生成されるJSONシリアライズ関連のコードを含むファイルを指定しています。
@freezed
class User with _$User {
// ...
}
@freezedアノテーションを付けることで、freezedパッケージがこのクラスに対してコード生成を行います。
Userクラスが_$Userというミックスインを使用することを示しています。
このミックスインは、自動生成されたコードを提供します。
コンストラクタ
factory User({
(name: 'id') required String id,
(name: 'name') required String name,
(name: 'birthday') required String birthday,
(name: 'gender ') required int gender,
(name: 'email') required String email,
}) = _User;
このコンストラクタは、クラスのインスタンスを生成するためのものです。
パラメータには、@JsonKeyアノテーションを使って、JSONのキー名とクラスのプロパティを対応付けています。
例えば、@JsonKey(name: 'id')は、JSONデータの'id'というキーをidプロパティにマッピングします。
requiredは、そのパラメータが必須であることを示します。
fromJson
factory User.fromJson(Map<String, Object?> json) => _$UserFromJson(json);
fromJsonという名前のファクトリーコンストラクタを定義しています。
これは、JSONマップからUserクラスのインスタンスを生成するためのものです。
_$UserFromJson(json)は、自動生成された関数で、JSONデータをUserオブジェクトに変換します。
ファイル作成
flutter pub run build_runner build
/// 強制実行 flutter pub run build_runner build --delete-conflicting-outputs
ターミナルでコマンドを実行して、自動生成ファイルを作成します。
一旦はこちらで作成できると思います。
あとはAPIのメソッドで返却値の型として利用できます。
Discussion