데이터로서의 페이지, 리졸버를 통한 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를 순수 메타데이터로 유지하세요.