-
[Flutter] freezed 사용하기 ! (Code Generator)개발/Flutter 2023. 1. 10. 12:16
freezed 란?간략히 말하면 data-classes / unions / pattern-matching / cloning을 위한 Code Generator
데이터 클래스에서 필요로 하는 기능들의 생성을 제공해주는 라이브러리 입니다.
Dart에는 union types 및 pattern-matching와 같은 기능이 없습니다.
이것을 직접 구현하려면 리소스가 소비되며 가독성도 떨어질수있어
이러한 문제의 해결에 탁월한 기능을 제공합니다.- 생성자 + 속성 정의하기
- toString, operator ==, hashCode 오버라이드
- 객체를 복제하기 위한 copyWith 메서드 구현
- 역/직열화 처리
사용법
freezed 사용을 위해선 build_runner 와 freezed 를 pubspec.yaml 에 추가 필요 합니다.
terminal
dart pub add freezed_annotation dart pub add --dev build_runner dart pub add --dev freezed # fromJson/toJson 생성도 사용하려면 아래를 추가 dart pub add json_annotation dart pub add --dev json_serializable
- build_runner: code-generators를 실행하기 위한 도구
- freezed: code generator
- freezed_annnotation : annotations을 포함하고 있는 패키지
그리고 모델 생성 후 명령어 실행하여 생성합니다.
terminal
dart run build_runner build
모델 생성
// 필수: `person.dart`를 Freezed에서 생성한 코드와 연결합니다. part 'person.freezed.dart'; // 옵션(선택사항): Person 클래스는 직렬화 가능하므로 이 줄을 추가해야 합니다. // 그러나 Person이 직렬화 가능하지 않은 경우 건너뛸 수 있습니다. part 'person.g.dart'; @freezed class Person with _$Person { const factory Person({ required String firstName, required String lastName, required int age, }) = _Person; factory Person.fromJson(Map<String, Object?> json) => _$PersonFromJson(json); }
- 모델에 @freezed 또는 @unfreezed annotate를 작성해야 합니다.
@freezed - immutable
@unfreezed - mutable - 접두사 _$ 가 붙은 클래스 이름과 mixin을 적용해야 합니다.
- 생성자를 정의 할때는 factory 를 사용해야합니다.
출처 - https://pub.dev/packages/freezed
'개발 > Flutter' 카테고리의 다른 글
[Flutter] Container Widget 에 대하여 .. (0) 2023.01.13 [Flutter] GoogleFonts 사용하기 (폰트 변경 하기) (0) 2023.01.12 [Flutter] Wrap widget 에 대하여... (0) 2023.01.11 [Dart/Flutter] Factory 생성자에 대하여 (0) 2023.01.10 [Flutter] Row & Column Widgets (0) 2022.10.27