riverpod + flutter_hooks の状態管理導入時に、Stateの更新に copyWith が欲しくなったので freezed で自動生成する手順をやってみました。
生成するコマンドが覚えられないので備忘録的な記事です。
【Flutter】freezed で immutable(不変)なクラスを生成するコマンド
build_runner と freezed で pubspec.yaml に追加する
dev_dependencies:
build_runner: ^2.1.8
freezed: ^1.1.1
自動生成するfreezedなStateクラスと定義
import 'package:freezed_annotation/freezed_annotation.dart';
part 'sample_state.freezed.dart';
@freezed
class SampleState with _$SampleState {
const factory SampleState({
@Default(0) int count;
@Default('') String name;
@Default(false) bool isEnable;
}) = _SampleState;
}
本題の自動生成するコマンド
$ flutter pub run build_runner build --delete-conflicting-outputs
–delete-conflicting-outputs は初回は無くても成功するけど、更新する時に同じファイルが既にあるとコンフリクトとみなされてエラーになります。
なので基本オプションつけてやれば問題なし(だと思う)。
成功すると sample_state.freezed.dart が生成されるはずです。
これで copyWith を使って特定の値だけ更新するような書き方ができるようになります。
void imcrementCount() {
state = state.copyWith(count: count + 1)
}
set name(String name) => state = state.copyWith(name: name);
void toggleEnable() {
state = state.copyWith(isEnable: !state.isEnable);
}
以上
コメントを残す