[Flutter] Freezed로 모델클래스, 상태관리 클래스 만들기

S_Soo100·2023년 2월 2일
0

flutter

목록 보기
5/14
post-thumbnail

라이브러리 추가

  • 생각보다 추가할 게 많다.
    json을 가공하는 라이브러리나 코드 생성기를 함께 사용하기 때문이다.
//frozen 에 대한 주석이 포함된 패키지
$ flutter pub add freezed_annotation
$ flutter pub add json_serializable
//frozen 코드 생성기를 실행하는 도구
$ flutter pub add --dev build_runner
//frozen 코드 생성기
$ flutter pub add --dev freezed

Model 클래스 생성

import 'package:freezed_annotation/freezed_annotation.dart';

part 'user_model.freezed.dart';
part 'user_model.g.dart';

@freezed
class UserModel with _$UserModel {
  const factory UserModel({
    required String? uid,
    required String? phone,
    required String? email,
    required String? name,
    required DateTime? birthDate,
  }) = _UserModel;

  factory UserModel.fromJson(Map<String, Object?> json) =>
      _$UserModelFromJson(json);
}

상태 관리 클래스 생성

import 'package:freezed_annotation/freezed_annotation.dart';

part 'user_state.freezed.dart';

@freezed
class UserState with _$UserState {
  const factory UserState.initialize() = Initialize;
  const factory UserState.signing() = Signing;
  const factory UserState.signedComplete() = SignedComplete;
  const factory UserState.noUser() = NoUser;
  const factory UserState.errorState() = ErrorState;
}

코드 생성기 실행

  • freezed를 사용하려는 파일의 맨 위에는 아래 2줄을 추가하자.
    import 'package:freezed_annotation/freezed_annotation.dart';
    
    part 'my_file.freezed.dart';

package:flutter/foundation.dart을 추가하는 것도 고려해보자, 코드를 nicely readable 하게 만들어 줄 것이다.

</aside>
  • 아래 터미널 명령어를 실행하면 freezed코드가 생성된다.
    $ flutter pub run build_runner build
    
    //기존에 build_runner로 만든 코드가 있는 경우 에러가 뜬다
    //그때는 파일 하나하나 지우고 다시 돌리지 말고 이렇게 하자
    $ flutter pub run build_runner build --delete-conflicting-outputs
profile
플러터, 리액트

0개의 댓글