Sahifalar ma'lumot sifatida, UI Resolver orqali

PageEntry ichida faqat metadata saqlang. Har bir page key ni haqiqiy widgetga moslash uchun buildPage dan foydalaning.

Serializatsiya qilinadigan holat

PageEntry oddiy ma'lumotdir, shuning uchun navigatsiya holatini loglash, diff qilish va qayta ijro etish mumkin.

Oddiy resolver

page.key ustidagi switch marshrutlashni aniq va ko'rib chiqish mumkin bo'lgan holda saqlaydi.

Yagona haqiqat manbai

Push va pop _pages ustidagi ro'yxat amallari, yon ta'sirlar emas.

Resolver namunasi

page key bo'yicha quring va sahifalar ro'yxatini deklarativ tarzda o'zgartiring.

Sahifa holati qoidasi

Resolver misoli

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')]);
}
Metadatani ixcham saqlang

Joylashtirishdan saqlaning Widget instansiyalarini navigatsiya holatiga va qo'llab-quvvatlash qulay bo'lishi uchun PageEntry ni sof metadata sifatida saqlang.