Java15, Kotlin, C# 등에 문법으로 제공되는 기능으로 Enum보다 다양하게 사용하면서 타입을 제한할 수 있다.
Dart에서 지원되지 않는 많은 것들을 지원하는 코드 제네레이터 라이브러리
freezed로 생성한 Result 클래스 - Sealed Class
freezed로 만든 직렬화/역직렬화, 깊은 복사, toString, equals, hashCode 재정의 된 불변 객체 = data class
freezed 는 코드 생성 라이브러리다.
build_runner 라이브러리를 통해서 다음 명령으로 코드를 생성한다.
flutter pub run build_runner build
*.freezed.dart
, *.g.dart
파일이 생성된다. (생성된 파일은 버전관리에서 제외)
파라미터의 기본 값 지정 어노테이션 지원
이벤트를 정의하는 Sealed Class
ViewModel에서 패턴 매칭 사용 가능
UI에서 이벤트를 통해서만 로직이 수행되도록 제한할 수 있다. ViewModel에는 onEvent()메서드 이외의 메서드를 노출하지 않아야 된다.
상태를 가지는 state 클래스
ViewModel 내에서는 state만 노출한다.
ViewModel 내에서 상태가 변경되면 깊은 복사 후 UI 갱신 알림
UI에서는 state를 통해 데이터를 얻는다.