Strani kot podatki, UI prek razreševalnika

V PageEntry shranite samo metapodatke. Uporabite buildPage, da vsako page key preslikate v dejanski widget.

Serializabilno stanje

PageEntry so goli podatki, zato je mogoče navigacijsko stanje beležiti, primerjati in ponovno predvajati.

Preprost razreševalnik

Switch na page.key ohranja usmerjanje eksplicitno in pregledno.

En sam vir resnice

Push in pop sta operaciji na seznamu _pages, ne stranska učinka.

Vzorec razreševalnika

Gradite po ključu strani in deklarativno spreminjajte seznam strani.

Pravilo stanja strani

Primer razreševalnika

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')]);
}
Metapodatki naj ostanejo lahki

Izogibajte se postavljanju instanc Widget v navigacijsko stanje in ohranite PageEntry kot čiste metapodatke zaradi boljše vzdržljivosti.