[Flutter] Stacked에서 view와 viewModel의 생성 순서
2023. 4. 2. 11:39ㆍDevelopers 공간 [Shorts]/Frontend
728x90
반응형
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew,
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter
- Module Bundler : React, Webpack, Parcel
B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS
C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight
1. What? (현상)
Stacked 패키지를 활용해 View와 ViewModel을 예시로 아래와 같이 만들어져있다고 가정할때, View와 ViewModel이 생성되는 순서를 살펴보고자 합니다.
아래 설명되어 있는 View와 ViewModel은 Stacked 패키지의 기본모델인 StartupView를 예로 들되, 기본적으로 쓰이는 BaseViewModel이 아닌 FutureViewModel을 기준으로 만들었을 때의 순서를 살펴보고자합니다.
하기에 적혀있는 A~F의 순서를 표현해 설명하도록하겠습니다.
import 'package:flutter/scheduler.dart';
import 'startup_viewmodel.dart';
...
class StartupView extends StackedView<StartupViewModel> {
StartupView({Key? key}){
// A. View Constructor
};
@override
Widget builder(
BuildContext context,
StartupViewModel viewModel,
Widget? child,
) {
// B. View Builder
return Scaffold(
...
);
}
@override
StartupViewModel viewModelBuilder(
BuildContext context,
){
// C. View ViewModdel Builder Call
return StartupViewModel();
}
@override
void onViewModelReady(StartupViewModel viewModel) => SchedulerBinding.instance
.addPostFrameCallback((timeStamp) => viewModel.runStartupLogic());
}
...
class StartupViewModel extends FutureViewModel {
final _navigationService = locator<NavigationService>();
StartupViewModel(){
// D. ViewModel Constructor
}
// Place anything here that needs to happen before we get into the application
Future runStartupLogic() async {
// E. ViewModel Scheduled
_navigationService.replaceWithHomeView();
}
@override
Future<void> futureToRun() async{
// F. FutureViewModel Runner
}
}
2. Why? (원인)
- X
3. How? (해결책)
만들어지는 순서를 정리하면 아래와 같습니다.
- ----------------------------View--------------------------------
- STEP1. A. View Constructor : 먼저 View의 Constructor가 가장 먼저 불립니다.
(항상 View와 View Model 모두 Constructor 가 우선입니다.) - STEP2. C. View ViewModel BuilderCall : 자기 View를 Build하기 전에 View Model을 먼저 Build하라고 명령어를 보냅니다.
- ---------------------------ViewModel--------------------------
- STEP3. D. ViewModel Contructor : ViewModel 역시 Constructor가 가장 먼저 불립니다.
- STEP4. F. FutureViewModel Runner : ViewModel이 FutureViewModel인 경우, futureToRun()함수가 먼저 불립니다.
- ----------------------------View--------------------------------
- STEP5. B. View Builder : ViewModel이 완성되었으니, View를 Rendering하기 시작합니다.
- ---------------------------ViewModel--------------------------
- STEP6. E. ViewModel Scheduled : StackedView에서 상속가능한 onViewModelReady()라는 함수를 schedule해 실행합니다.
- ----------------------------View--------------------------------
- STEP7. B. View Builder : View를 다시한번 Rendering 합니다.
https://stacked.filledstacks.com/docs/getting-started/startup-logic
728x90
반응형
'Developers 공간 [Shorts] > Frontend' 카테고리의 다른 글
[Flutter] iOS 개발 시 나오는 다양한 ID 정리 (+signing 개념) (0) | 2023.04.02 |
---|---|
[Flutter] Platform 정보를 확인하기 위한 방법 정리 (0) | 2023.04.02 |
[Flutter] 버튼에 애니메이션 넣기 (0) | 2023.03.28 |
[Flutter] Portrait, Landscape mode 막기 (0) | 2023.03.28 |
[Flutter] ios 셋팅 수정 및 다양한 상황에서 문제 해결하기 (0) | 2023.03.27 |