Puslapiai kaip duomenys, UI per resolverį

Saugokite tik metaduomenis PageEntry. Naudokite buildPage, kad kiekvieną puslapio raktą susietumėte su tikru widgetu.

Serializuojama būsena

PageEntry yra paprasti duomenys, todėl navigacijos būseną galima žurnaluoti, diffinti ir atkurti.

Paprastas resolveris

Perjungimas pagal page.key išlaiko maršrutizavimą aiškų ir peržiūrimą.

Vienas tiesos šaltinis

Push ir pop yra _pages sąrašo operacijos, o ne šalutiniai poveikiai.

Resolverio modelis

Kurkite pagal puslapio raktą ir deklaratyviai keiskite puslapių sąrašą.

Komanda

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')]);
}
Laikykite metaduomenis lengvus

Venkite talpinti Widget egzempliorius į navigacijos būseną ir laikykite PageEntry grynais metaduomenimis dėl palaikomumo.

Ankstesnis

Diegimas