Puslapiai kaip duomenys, UI per resolverį
Saugokite tik „PageEntry“ metaduomenis. Naudokite „buildPage“, kad susietumėte kiekvieną puslapio raktą su konkrečiu valdikliu (widget).
Serializuojama būsena
„PageEntry“ yra paprasti duomenys, todėl navigacijos būseną galima registruoti žurnale (log), palyginti (diff) ir atkurti.
Paprastas resolveris
Sąlygų tikrinimas (switch) pagal „page.key“ užtikrina aiškų ir lengvai sekamą maršrutų parinkimą.
Vienas tiesos šaltinis
Push ir pop veiksmai yra paprastos sąrašo „_pages“ operacijos, o ne šalutiniai efektai.
Resolverio šablonas
Kurkite UI pagal puslapio raktą ir deklaratyviai keiskite puslapių sąrašą.
Puslapio būsenos taisyklė
Resolverio pavyzdys
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')]);
}
Užtikrinkite, kad metaduomenys būtų kompaktiški
Venkite talpinti „Widget“ egzempliorius į navigacijos būseną ir laikykite „PageEntry“ grynais metaduomenimis dėl kodo palaikomumo.