Stacked에서는 네비게이션을 쉽게 관리할 수 있도록 NavigationService와 자동 라우팅 시스템을 제공합니다. 이로 인해 ViewModel에서도 자유롭게 화면 전환이 가능하고, 코드가 깔끔해집니다.
stacked_generator를 통한 자동 라우트 생성먼저 라우팅을 자동화하기 위해 아래 설정을 해줘야 합니다.
app.dart 파일 생성 예시:(
routes: [
MaterialRoute(page: HomeView),
MaterialRoute(page: DetailsView),
],
)
class App {}
@StackedApp 애너테이션을 통해 앱 내 라우트를 정의합니다.MaterialRoute를 사용하여 일반 화면 이동을 설정합니다.build_runner로 코드 생성flutter pub run build_runner build --delete-conflicting-outputs
→ 자동으로 app.router.dart, app.dart 등이 생성됨.
서비스를 전역에서 사용하려면 의존성 주입 설정에 추가해야 합니다.
final locator = StackedLocator.instance;
void setupLocator() {
locator.registerLazySingleton(() => NavigationService());
}
final _navigationService = locator<NavigationService>();
_navigationService.navigateToHomeView();
위 함수는 자동 생성된 라우트 이름 기반으로 만들어진 메서드입니다.
_navigationService.navigateToDetailsView(
id: 5,
name: 'Stacked',
);
→ 라우트 설정 시 DetailsView가 named parameters를 받도록 정의되어 있다면 이렇게 전달 가능.
_navigationService.back();
→ 이전 화면으로 돌아가는 기본 동작.
_navigationService.replaceWithHomeView();
→ 현재 화면을 대체하고 새로운 화면으로 이동합니다.
| 기능 | 코드 예시 |
|---|---|
| 화면 이동 | _navigationService.navigateToHomeView(); |
| 인자 전달 | _navigationService.navigateToDetailsView(id: 1); |
| 화면 교체 | _navigationService.replaceWithLoginView(); |
| 뒤로 가기 | _navigationService.back(); |