🧊

[Flutter / Freezed] Freezedでimmutableなクラスを生成

2022/09/18に公開

はじめに

Modelクラスはimmutableである方が好ましいということはRiverpod(StateNotifierProvider)の記事に記しましたが、
一からModelクラスを書くよりは、Freezedパッケージを使用して生成した方が楽且つ安全性の担保ができます。

今回は別記事で作成したTodoアプリのModelクラスを例に手順をまとめようと思います。
https://zenn.dev/taku_zenn/articles/e416eab158ae0f

手順

  1. パッケージのインストール
terminal
$ dart pub add freezed
$ dart pub add build_runner
pubspec.yaml
dependencies:
  flutter:
    sdk: flutter

  build_runner: ^2.2.0 # 記事作成時のバージョン
  freezed: ^2.0.4 # 記事作成時のバージョン
  1. Modelの定義
    定型分的に書いていきますが、デフォルト値を与える書き方もあります。
todo.dart
import 'package:freezed_annotation/freezed_annotation.dart';
part 'todo.freezed.dart';


class Todo with _$Todo {
  const factory Todo({
  required String id,
  // @Default('') String id; デフォルト値を与える場合の書き方
  required String description,
}) = _Todo;
}
  1. コマンド実行
terminal
$ flutter pub run build_runner build
  1. 確認
    「todo.dart」と同じディレクトリに「todo.freezed.dart」が生成されていることを確認。
    これでimmutableなTodoクラスが出来上がりです。

おわりに

この記事の内容だけでも充分ではありますが、
Modelクラスにメソッドを追加したりするにはもう一手間必要だったりします。
今回参考にさせていただいた下記サイトに詳しく書かれています。
https://www.memory-lovers.blog/entry/2022/04/18/111000

脚注
  1. 脚注の内容その1
    https://pub.dev/packages/freezed/install ↩︎

  2. 脚注の内容その1
    https://pub.dev/packages/build_runner/install ↩︎

Discussion