[Flutter] Freezed

김영진·2022년 1월 4일
0

Flutter 앱 개발 일기

목록 보기
22/31
post-custom-banner

목적

기존에 웹사이트에서 하던 모델링을 터미널에서 하려고 합니다.
변경하는 이유는 웹사이트가 널세이프티 지원을 안하고, 모델 파싱하는부분이 제대로 되어있지 않아서 손이 가는 부분이 있었다.
따라서
모델 코드 제너레이션 간편화를 위해 Freezed를 적용전에 문서화 하려고 합니다.

내용

dependency 등록

dependencies:
  freezed_annotation: $version

dev_dependencies:
  build_runner: $version
  freezed: $version
  json_serializable: $version

Model 생성

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;

Code Generation

터미널 창에
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번 이면 충분할것 같다.

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 1월 12일

안녕하세요 영진님! 사이드 프로젝트 개발 포지션 제안드리려고 메일 보냈습니다! 확인 부탁드려요:)

답글 달기