데이터로서의 페이지, 리졸버를 통한 UI 빌드
PageEntry에는 메타데이터만 저장하고, buildPage를 사용하여 각 페이지 키를 실제 위젯에 매핑합니다.
직렬화 가능한 상태
PageEntry는 단순 데이터이므로, 내비게이션 상태를 로깅, 비교(diffing) 및 재현할 수 있습니다.
간단한 리졸버
page.key를 기반으로 분기 처리하여 라우팅 경로를 명시적이고 쉽게 검토할 수 있도록 합니다.
단일 진실 공급원
push와 pop은 부수 효과(side effects)가 아닌 _pages 리스트에 대한 단순 조작 작업입니다.
리졸버 패턴
페이지 키를 기반으로 빌드하고 선언적인 방식으로 페이지 리스트를 변경하세요.
페이지 상태 규칙
리졸버 예제
Widget _buildPage(BuildContext context, PageEntry page) {
switch (page.key) {
case 'home':
return HomePage(onGoDetail: _goDetail);
case 'detail':
return const DetailPage();
default:
return const SizedBox.shrink();
}
}
void _goDetail() {
setState(() => _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')]);
}
메타데이터를 가볍게 유지
유지보수성을 위해 내비게이션 상태에 Widget 인스턴스를 배치하는 것 은 피하고 PageEntry를 순수 메타데이터로 유지하세요.