인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

mhlee님의 프로필 이미지

작성한 질문수

Flutter 중급 1편 - 클린 아키텍처

26 첫 번째 ViewModel 작성

freezed3.0에서 build시 when생성되지 않습니다.

작성

·

130

·

수정됨

0

freezed: ^3.0.6
freezed_annotation: ^3.0.0

 

으로 진행후 notes_event.freezed.dart 파일에 when, map

생성되지 않습니다.

 

sealed도 써보고 

abstract를 지우고 해도 마찬가지 인데 혹시 방법이 있을까요?

 

 

코드 내용

import 'package:flutter_note_app/domain/model/note.dart';

import 'package:freezed_annotation/freezed_annotation.dart';

part 'notes_event.freezed.dart';

@freezed

sealed class NotesEvent with _$NotesEvent {

const factory NotesEvent.loadNotes() = LoadNotes;

const factory NotesEvent.deleteNote(Note note) = DeleteNote;

const factory NotesEvent.restoreNote() = RestoreNote;

}

 

 

image.png

 -------------------------------------------

freezed 3.0.0 변경점 로그

3버전부터 삭제가 되었군요. 인터넷에 when사용관련으로 옵션 등등 찾아서 했지만 모두 생성이 안되었습니다. 이제 when은 사용하지 않는게 좋을것 같습니다.

 

image.png

 

import 'package:flutter_note_app/presentation/notes/notes_event.dart';

void handleEvent(NotesEvent event) {

switch (event) {

case LoadNotes():

print("Loading notes...");

break;

case DeleteNote():

print("Deleting");

break;

case RestoreNote():

print("Restoring note");

break;

}

}
dart3.0 부터 swich문이 추천이라고하네요!

 

 

선생님 Flutter Live Templeate 쪽에도 올라왔네요 템플릿 참고해주세요!

https://gravel-pike-705.notion.site/Flutter-Live-Templeate-579bac3070754bdf8fa10afe4ebe8c92

답변 2

0

오준석님의 프로필 이미지
오준석
지식공유자

네. 공유해 주신대로 when 은 삭제가 되었습니다. switch 를 쓰는 것이 권장사항입니다.

https://youtu.be/Cl9FcNNbiu8?si=V1XLQF7DczvwPw3X&t=186

mhlee님의 프로필 이미지
mhlee
질문자

감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. mhlee님께서 언급해주신 문제는 freezed 패키지의 특정 버전에서 whenmap 메서드가 자동으로 생성되지 않는 상황에 대한 문의입니다. 이러한 기능들이 작동하지 않는다면, 다음과 같은 사항들을 점검해보실 수 있습니다.

문제 원인 및 해결 방법

  1. Freezed 패키지 설정 확인:

    • freezedfreezed_annotation 패키지의 의존성 버전이 서로 맞지 않으면 제대로 작동하지 않을 수 있습니다. 두 패키지의 버전이 호환되는지 재확인하세요.
  2. 업데이트 및 캐시 클리어:

    • flutter clean 명령어로 빌드 캐시를 정리한 후 다시 flutter pub get을 실행해 보세요. 그런 다음 flutter pub run build_runner build 명령을 실행해 파일을 재생성합니다.
  3. 코드 수정 제안:

    • sealed classabstract class 사용에 관해 점검이 필요합니다. Freezed에서 abstract 대신 sealed를 사용하도록 업데이트되었으므로 코드에서 abstract를 제거하고 sealed를 추가해보세요.
    • 아울러, 각 팩토리 메서드가 const로 선언되어 있어서 이는 변경이 필요없으나 코드 전체에서 일관성을 유지하는 것이 중요합니다.

예를 들면, 다음과 같이 코드를 수정할 수 있습니다:

import 'package:flutter_note_app/domain/model/note.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

part 'notes_event.freezed.dart';

@freezed
class NotesEvent with _$NotesEvent {
  const factory NotesEvent.loadNotes() = LoadNotes;
  const factory NotesEvent.deleteNote(Note note) = DeleteNote;
  const factory NotesEvent.restoreNote() = RestoreNote;
}

이와 유사한 문제가 언급된 게시물은 다음과 같습니다:
- g.dart 파일이 생성이 안됩니다.: 이는 오타로 인한 문제 해결 방법을 다룹니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

mhlee님의 프로필 이미지

작성한 질문수

질문하기