Sider som data, UI via resolver

Lagre bare metadata i PageEntry. Bruk buildPage til å mappe hver sidenøkkel til en faktisk widget.

Serialiserbar tilstand

PageEntry er rene data, så navigasjonstilstand kan logges, diffes og spilles av på nytt.

Enkel resolver

En switch på page.key holder ruting eksplisitt og lett å gå gjennom i kodegjennomgang.

Én kilde til sannhet

Push og pop er listeoperasjoner på _pages, ikke sideeffekter.

Resolver-mønster

Bygg etter sidenøkkel og muter sidelisten deklarativt.

Regel for sidetilstand

Resolver-eksempel

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')]);
}
Hold metadata slanke

Unngå å legge Widget-instansene inn i navigasjonstilstanden og behold PageEntry som rene metadata for bedre vedlikeholdbarhet.