🌊

Flutter freezed_annotationを使ったmodel作成(@初心者)

2024/11/19に公開

freezed_annotationを使ったmodel作成

業務でAPIをつかった値を受け取るmodel作成をしました。
その際にfreezed_annotationを使ったので備忘録です。

Flutterの状態管理ライブラリであるRiverpodやFlutter Hooksと一緒に利用できます。

パッケージは下記
https://pub.dev/packages/freezed_annotation/install

コードは下記の様に記載しました。下記はチートシートになります。

///  /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