Seiten als Daten, UI über den Resolver

Speichern Sie in PageEntry nur Metadaten. Verwenden Sie buildPage, um jeden Seitenkey einem echten Widget zuzuordnen.

Serialisierbarer Zustand

PageEntry sind reine Daten, daher kann der Navigationszustand protokolliert, verglichen und erneut abgespielt werden.

Einfacher Resolver

Ein switch auf page.key hält das Routing explizit und prüfbar.

Eine einzige Wahrheitsquelle

Push und pop sind Listenoperationen auf _pages, keine Seiteneffekte.

Resolver-Muster

Konstruieren Sie nach Seitenkey und verändern Sie die Seitenliste deklarativ.

Regel für den Seitenzustand

Resolver-Beispiel

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')]);
}
Metadaten schlank halten

Vermeiden Sie das Platzieren Widget-Instanzen in den Navigationszustand und halten Sie PageEntry zur Wartung als reine Metadaten.