기존에 웹사이트에서 하던 모델링을 터미널에서 하려고 합니다.
변경하는 이유는 웹사이트가 널세이프티 지원을 안하고, 모델 파싱하는부분이 제대로 되어있지 않아서 손이 가는 부분이 있었다.
따라서
모델 코드 제너레이션 간편화를 위해 Freezed를 적용전에 문서화 하려고 합니다.
dependencies:
freezed_annotation: $version
dev_dependencies:
build_runner: $version
freezed: $version
json_serializable: $version
part 'person.freezed.dart';
part 'person.g.dart';
class Person wtih _$Person {
('name.length < 5', '이름의 길이는 5보다 작아야 합니다.')
factory Persion({
required int id,
required String name,
required int age,
}) = _Person;
}
factory Person.fromJson(Map<String, dynamic> json)
=> _$PersonFromJson(json);
// 커스텀 메소드나 게터 세터를 사용하고 싶으면 아래의 생성자를 생성해줘야함
Person._();
get nameLength => this.name.length;
void hello(){
print('Hello');
}
factory Person.loading({int? statusCode}) = _Loading;
factory Person.error(String message, {int? statusCode}) =
_Error;
터미널 창에
flutter pub run build_runner build
코드 제너레이션이 되면
1. toString
2. fromJson
3. toJson
4. Equatable
과 같은 기능을 사용할 수 있다.
5. Validation Check
도 추가로 사용 가능하다
6. Custom getter, setter, function
등도 사용 가능하다.
7. copyWith
8. when 과 같은 부가적인 기능도 많은데 문서 참고합시다.
잘쓰면 좋을것같다.
엄청 많은 기능은 필요를 못느끼고 1~5번 이면 충분할것 같다.
안녕하세요 영진님! 사이드 프로젝트 개발 포지션 제안드리려고 메일 보냈습니다! 확인 부탁드려요:)