ViewModel은 View(UI)와 Business Logic(서비스 등) 사이를 연결해주는 중간 역할을 합니다.
Stacked 프레임워크에서는 BaseViewModel 또는 다양한 특수 ViewModel 클래스를 상속받아 상태 관리와 로직 분리를 손쉽게 구현할 수 있습니다.
View는 ViewModel이 제공하는 데이터만 보고, ViewModel은 상태를 바꾸고 알립니다.
BaseViewModel 상속class CounterViewModel extends BaseViewModel {
int _counter = 0;
int get counter => _counter;
void increment() {
_counter++;
notifyListeners();
}
}
notifyListeners()를 호출하면 UI(View)가 자동으로 업데이트됩니다.| ViewModel 타입 | 설명 |
|---|---|
| BaseViewModel | 상태를 수동으로 제어할 수 있는 기본 ViewModel |
| ReactiveViewModel | 특정 서비스의 변화에 반응하여 자동 갱신되는 ViewModel |
| FormViewModel | @FormView와 함께 사용하는 Form 상태 관리 전용 ViewModel |
| FutureViewModel | 비동기 작업을 ViewModel 내에서 처리하고, 완료 후 View에 알림 |
| StreamViewModel | 실시간 데이터 스트림과 View를 연결할 때 사용 |
void updateSomething() {
// 데이터 변경
notifyListeners(); // UI에게 변경 알림
}
ChangeNotifier를 기반으로 하기 때문에 notifyListeners()를 통해 View를 갱신시킵니다.FutureViewModelclass UserViewModel extends FutureViewModel<User> {
Future<User> futureToRun() => _userService.fetchUser();
}
futureToRun()이 실행되고,| 요소 | 설명 |
|---|---|
BaseViewModel | 가장 기본이 되는 ViewModel 클래스 |
notifyListeners() | View 갱신 트리거 |
FutureViewModel | 비동기 데이터 처리에 적합 |
StreamViewModel | 실시간 데이터 처리에 적합 |
FormViewModel | 폼 상태를 쉽게 관리 |
ReactiveViewModel | 서비스 상태 변경을 View에 자동 반영 |
onModelReady, dispose)가 존재하여 관리 용이ViewModelBuilder 커스터마이징 방법