Pages et résolveur

Stockez uniquement les métadonnées dans PageEntry. Utilisez buildPage pour associer chaque clé de page à un widget réel.

État sérialisable

PageEntry est une donnée brute, de sorte que l'état de navigation peut être enregistré, comparé et rejoué.

Résolveur simple

Un switch sur page.key maintient le routage explicite et vérifiable.

Source unique de vérité

Push et pop sont des opérations de liste sur _pages, pas des effets secondaires.

Modèle de résolveur

Construisez par clé de page et mutez la liste des pages de manière déclarative.

Commande

Exemple de résolveur

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')]);
}
Gardez les métadonnées légères

Évitez de placer les instances de Widget dans l'état de navigation et conservez PageEntry en tant que métadonnées pures pour la maintenabilité.