Страницы как данные, UI через резолвер

Сохраняйте в PageEntry только метаданные. Используйте buildPage, чтобы сопоставить каждый ключ страницы с нужным виджетом.

Сериализуемое состояние

PageEntry — обычные данные, поэтому состояние навигации можно логировать, сравнивать и воспроизводить.

Простой резолвер

Переключатель по page.key делает маршрутизацию явной и обозримой.

Единственный источник истины

Push и pop — это операции над списком _pages, а не побочные эффекты.

Шаблон резолвера

Build by page key and mutate the page список declaratively.

Правило состояния страницы

Пример резолвера

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 как чистые метаданные ради поддерживаемости.

Предыдущая

Установка

Следующая

Резолверы