작성
·
66
·
수정됨
0
안녕하세요 강의중에 freezed3.0 변경 이후
sealed class 작성과 view_model에서 사용을 제대로 사용하고 있는지 문의드립니다.
*
1.switch 문 키워드 사용
ex case SaveNote(:final id, :final title, :final content):
2.viewModel class 연결부분
ex _changeColor(color);
AddEditNoteEvent(sealed class)코드
sealed class AddEditNoteEvent<T> {
factory AddEditNoteEvent.changeColor(int color) = ChangeColor;
factory AddEditNoteEvent.saveNote(int? id, String title, String content) =
SaveNote;
}
class ChangeColor<T> implements AddEditNoteEvent<T> {
final int color;
ChangeColor(this.color);
}
class SaveNote<T> implements AddEditNoteEvent<T> {
final int? id;
final String title;
final String content;
SaveNote(this.id, this.title, this.content);
}
view model(onEvent)- 코드
import 'package:flutter/material.dart';
import 'package:flutter_note_app/domain/model/note.dart';
import 'package:flutter_note_app/domain/repository/note_repository.dart';
import 'package:flutter_note_app/presentation/add_edit_note/add_edit_note_event.dart';
class AddEditNoteViewModle with ChangeNotifier {
final NoteRepository repository;
int _color = Colors.orange.value;
int get color => _color;
AddEditNoteViewModle(this.repository);
void onEvent(AddEditNoteEvent event) {
switch (event) {
case ChangeColor(:final color):
_changeColor(color);
break;
case SaveNote(:final id, :final title, :final content):
_saveNote(id, title, content);
break;
}
}
Future<void> _changeColor(int color) async {
_color = color;
notifyListeners();
}
Future<void> _saveNote(int? id, String title, String content) async {
if (id == null) {
await repository.inserNote(
Note(
title: title,
content: content,
color: _color,
timestamp: DateTime.now().millisecondsSinceEpoch,
),
);
} else {
await repository.updateNote(
Note(
id: id,
title: title,
content: content,
color: _color,
timestamp: DateTime.now().millisecondsSinceEpoch,
),
);
}
}
}
답변 2
0
네. 잘 사용하고 계십니다.
sealed 클래스 작성시 직접 작성 및 freezed 사용해도 되고요.
sealed 클래스를 switch 에서 분기 할 때 자동완성으로 파라미터를 생략해서 다음과 같이 접근도 가능합니다.
switch (event) {
case ChangeColor():
_changeColor(event.color);
break;
case SaveNote():
_saveNote(event.id, event.title, event.content);
break;
}
0
안녕하세요, 인프런 AI 인턴입니다. mhlee님께서 질문하신 내용은 freezed3.0
변경 이후 sealed class
작성과 view_model
에서의 사용 방법과 관련된 것이군요.
switch
문 사용:
sealed class
를 사용할 때, 모든 하위 클래스에 대해 switch
문을 사용할 수 있습니다. 이는 각 이벤트에 대해 특정 동작을 수행할 수 있도록 하기 위함입니다. sealed class
의 인스턴스가 어떤 타입인지를 switch
문을 통해 확실하게 확인할 수 있습니다.ViewModel과의 연결 부분:
sealed class
를 사용하여 이벤트를 관리할 때, viewModel
내에서 각 이벤트에 맞는 처리 로직을 구현할 수 있습니다. switch
문에서 각 이벤트 클래스에 맞는 메서드를 호출하여 원하는 기능을 수행하도록 하면 됩니다.작성하신 AddEditNoteEvent
와 ViewModel
의 적절성:
AddEditNoteEvent
클래스는 sealed class
의 패턴에 맞게 잘 작성되어 있습니다. 각 이벤트를 독립된 클래스로 선언하여 관리하고 있어, 명확하고 응집력 있는 설정입니다.ViewModel
에서 onEvent
메서드의 switch
문도 적절하게 작성하셨습니다. 이벤트에 따라 _changeColor
나 _saveNote
메서드를 호출하여 원하는 기능을 구현하고 있습니다.아래는 참고할 만한 유사한 Q&A 링크입니다:
- g.dart 파일이 생성이 안됩니다.: 이를 통해 오타로 인한 문제 및 해결 방법을 확인해 보실 수 있습니다.
- sealed class 데이터 접근: sealed class
관련 데이터 접근 문제에 대한 논의입니다.
기존의 작성된 코드가 잘 구성되어 있으므로, 그대로 진행하셔도 무방합니다. 추가로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
감사합니다 이해가 잘되는 플러터 강의입니다