Freezed
Immutable 한 객체를 생성 할 때 필요한 코드들을 자동으로 generated 해주는 패키지
- toJson / fromJson 함수를 제공하여 JSON 을 쉽게 Serialize / Deserialize 할 수 있다.
- equals , hashCode 함수 및 override 된 toString 을 지원해준다.
- 선언된 필드들을 외부에서 변경이 불가능하도록 get 을 선언해준다.
- copyWith 함수를 지원하여 새로운 객체의 생성을 도와준다.
사용법
1) 우선 pubspec.yaml 에 아래와 같이 필요한 패키지들을 추가한다.
2) 모델에 @freezed 어노테이션 설정 및 with 키워드로 '$className' 을 작성
@freezed
class UserModel with _$UserModel {
}
3) const 로 factory 생성자 지정 후 필요한 필드들을 작성 ( 기본값이 필요한 필드의 경우 @Default Annotation 사용 )
@freezed
class UserModel with _$UserModel {
const factory UserModel({
required String nickname,
@Default(false) boolean isVip,
}) = _UserModel;
}
4) Json Serialization 을 위한 함수 작성
@freezed
class UserModel with _$UserModel {
const factory UserModel({
required String nickname,
@Default(false) boolean isVip,
}) = _UserModel;
factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
}
5) 제일 상단에 'part' decoration 을 추가
part 'user_model.freezed.dart'
part 'user_model.g.dart'
@freezed
class UserModel with _$UserModel {
const factory UserModel({
required String nickname,
@Default(false) boolean isVip,
}) = _UserModel;
factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
}
6) 아래 커맨드 실행
flutter pub run build_runner build --delete-conflicting-outputs