Stacked - Startup Logic

김례원·2025년 7월 6일

Flutter

목록 보기
3/12
post-thumbnail

🚀 앱 시작 시 실행되는 로직 구성하기 (Startup Logic)

✅ 목표

앱이 시작될 때:

  • 사용자 로그인 상태를 확인하고
  • 그에 따라 적절한 첫 화면(HomeView 또는 LoginView)을 보여주는 초기 로직을 구성하는 방법을 설명합니다.

1️⃣ StartUpViewModel 만들기

앱 시작 시 필요한 로직을 담을 ViewModel을 생성합니다.

class StartUpViewModel extends FutureViewModel {
  
  Future<void> futureToRun() async {
    final user = await _authService.getCurrentUser();

    if (user != null) {
      // 홈으로 이동
      _navigationService.replaceWithHomeView();
    } else {
      // 로그인으로 이동
      _navigationService.replaceWithLoginView();
    }
  }
}
  • FutureViewModel을 상속받으면 futureToRun() 함수가 자동 실행됩니다.
  • 내부에서 사용자 상태에 따라 NavigationService를 통해 이동을 처리합니다.

2️⃣ StartUpView 만들기

class StartUpView extends StackedView<StartUpViewModel> {
  
  Widget builder(BuildContext context, StartUpViewModel viewModel, Widget? child) {
    return const Scaffold(
      body: Center(child: CircularProgressIndicator()),
    );
  }

  
  StartUpViewModel viewModelBuilder(BuildContext context) => StartUpViewModel();
}
  • 앱이 처음 실행될 때 잠시 로딩 인디케이터만 보여주는 화면입니다.
  • 실제 라우팅은 ViewModel에서 처리합니다.

3️⃣ NavigationService를 통한 라우팅

NavigationService를 사용하면 ViewModel 내에서 자유롭게 화면 전환을 할 수 있습니다.

final _navigationService = locator<NavigationService>();

_navigationService.replaceWithHomeView();  // 홈 화면으로 이동
_navigationService.replaceWithLoginView(); // 로그인 화면으로 이동

replaceWith...는 현재 화면을 대체합니다. 뒤로 가기 불가능.


✅ 요약

단계설명
StartUpViewModel앱 시작 시 로직 처리 (ex. 로그인 상태 확인)
StartUpView로딩만 보여주고, ViewModel이 라우팅을 담당
NavigationServiceViewModel에서 화면 전환 책임

이 구조를 사용하면, 앱 시작 시 로직을 UI와 분리하여 깔끔하게 구성할 수 있습니다.


알아보면 좋을 내용

  • NavigationService 등록법
  • replaceWithHomeView()처럼 자동 생성되는 route 이름 설정 방법

출처 : Stacked 공식 문서 - Startup Logic

profile
분야를 가리지 않는 개발자

0개의 댓글