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.

Ankstesnis

Diegimas