صفحه‌ها به‌عنوان داده، UI از طریق ریزولور

فقط متادیتا را داخل PageEntry نگه دارید. از buildPage برای نگاشت هر کلید صفحه به یک widget واقعی استفاده کنید.

وضعیت قابل سریال‌سازی

PageEntry دادهٔ ساده‌ای است، بنابراین وضعیت ناوبری را می‌توان ثبت، مقایسه و بازپخش کرد.

ریزولور ساده

یک switch روی page.key مسیر‌یابی را صریح و قابل بازبینی نگه می‌دارد.

یک منبع حقیقت

push و pop عملیات فهرست روی _pages هستند، نه اثر جانبی.

الگوی ریزولور

بر اساس کلید صفحه build کنید و فهرست صفحه‌ها را به‌صورت declarative تغییر دهید.

قانون وضعیت صفحه

نمونهٔ ریزولور

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')]);
}
متادیتا را سبک نگه دارید

از قرار دادن نمونه‌های Widget را در وضعیت ناوبری خودداری کنید و PageEntry را برای نگه‌داری‌پذیری به‌صورت متادیتای خالص نگه دارید.