🧊
[Flutter / Freezed] Freezedでimmutableなクラスを生成
はじめに
Modelクラスはimmutableである方が好ましいということはRiverpod(StateNotifierProvider)の記事に記しましたが、
一からModelクラスを書くよりは、Freezedパッケージを使用して生成した方が楽且つ安全性の担保ができます。
今回は別記事で作成したTodoアプリのModelクラスを例に手順をまとめようと思います。
手順
- パッケージのインストール
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 # 記事作成時のバージョン
- 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;
}
- コマンド実行
terminal
$ flutter pub run build_runner build
- 確認
「todo.dart」と同じディレクトリに「todo.freezed.dart」が生成されていることを確認。
これでimmutableなTodoクラスが出来上がりです。
おわりに
Modelクラスにメソッドを追加したりするにはもう一手間必要だったり。
参考記事
Discussion