Stránky jako data, UI přes resolver
Do PageEntry ukládejte jen metadata. Pomocí buildPage namapujte každý klíč stránky na konkrétní widget.
Serializovatelný stav
PageEntry je obyčejná data, takže stav navigace lze logovat, porovnávat a přehrávat.
Jednoduchý resolver
switch nad page.key udržuje routování explicitní a snadno kontrolovatelné.
Jediný zdroj pravdy
Push a pop jsou operace se seznamem _pages, ne vedlejší efekty.
Vzor resolveru
Sestavujte podle klíče stránky a seznam stránek měňte deklarativně.
Pravidlo stavu stránky
Příklad resolveru
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')]);
}
Nechte metadata štíhlá
Nevkládejte instance Widgetu do stavu navigace do stavu navigace a PageEntry ponechte jako čistá metadata kvůli snazší údržbě.