Lapas kā dati, UI caur atrisinātāju

Saglabājiet tikai metadatus PageEntry. Izmantojiet buildPage, lai katru lapas atslēgu sasaistītu ar reālu logrīku.

Serializējams stāvoklis

PageEntry ir vienkārši dati, tāpēc navigācijas stāvokli var žurnalēt, salīdzināt un atskaņot.

Vienkāršs atrisinātājs

switch pēc page.key uztur maršrutēšanu skaidru un pārskatāmu.

Viens patiesības avots

Push un pop ir saraksta operācijas uz _pages, nevis blakusefekti.

Atrisinātāja paraugs

Veidojiet pēc lapas atslēgas un deklaratīvi mainiet lapu sarakstu.

Lapas stāvokļa noteikums

Atrisinātāja piemērs

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')]);
}
Metadatiem jābūt lakoniskiem

Izvairieties ievietot Widget instances navigācijas stāvoklī un saglabājiet PageEntry kā tīrus metadatus uzturamībai.