【Flutter】freezedを使用し、クラスモデルを生成する
Flutter の freezed を使い、immutable なモデルクラスを生成します。
まずは、必要なパッケージをインストールします。
freezed をインストールするために、ターミナルで、flutter pub add freezed --devを実行します。
freezed とセットで必要となる freezed_annotation をインストールするために、ターミナルで、flutter pub add freezed_annotationを実行します。
オブジェクトと JSON の文字列を変換するために、json_serializable と json_annotation をインストールします。
ターミナルで、flutter pub add json_serializable --devを実行します。
もし、インストール時や実行時エラーが発生した場合、json_serializable のバージョンを 6.1.0 にすると、うまくいきました。
ターミナルで、flutter pub add json_annotationを実行します。
こちらもインストール時や実行時エラーが発生した場合、json_annotation のバージョンを 4.4.0 にすると、うまくいきました。
最後に、クラスを生成するために build_runner をインストールします。
ターミナルでflutter pub add build_runner --devを実行します。
さらにターミナルでflutter pub getを実行します。
インストールが一通り完成したので、次はモデルを作成します。
models フォルダを作成します。
models フォルダ内に、book_model.dart を作成します。
foundation.dart と freezed_annotation.dart をインポートします。
クラスの生成先となる、book_model.freezed.dart と book_model.g.dart を指定します。
pub.dev の freezed の例(https://pub.dev/packages/freezed)に沿って、クラスを作成します。
クラスの上には、@freezed を指定します。
こちらを指定することで、下に作成したクラスの内容を freezed がモデルクラスを作成してくれます。
今回は、title を author、createdAt を指定します。
クラスが作成できたので、ターミナルで、flutter packages pub run build_runner build --delete-conflicting-outputsを実行します。
この時点で、part 'book_model.g.dart';に『Target of URI hasn't been generated: 'book_model.g.dart'.Try running the generator that will generate the file referenced by the URI.』のエラーが発生した場合、json_serializable と json_annotation のバージョンを疑ってください。
models フォルダに book_model.freezed.dart と book_model.g.dart が生成されました。
book_model.freezed.dart の中身は、CopyWith などのモデルクラスが生成されています。
book_model.g.dart の中身は、FromJson と ToJson のメソッドが生成されています。
お知らせ
私事ですが、Udemyで初心者を対象にしたReactの動画コースを作成しました。
Reactについて興味がありましたら、ぜひ下のリンクからアクセスしてください。
詳しくはこちら(Udemyの外部サイトへ遷移します)