Антипаттерны, которых стоит избегать

Большинство багов возникает, когда смешиваются императивная и декларативная модели. Сохраняйте жёсткую границу состояния.

Смешение push/pop со страницами

Не вызывайте Navigator.push/pop для стеков, уже управляемых List<PageEntry>.

Widget в состоянии

Не помещайте экземпляры Widget в метаданные страницы. Храните только ключи и идентификаторы в стиле маршрутов.

Дублирующиеся ключи

Не переиспользуйте одинаковые значения PageEntry.key в одном стеке.

Чек-лист миграции

Используйте этот чек-лист во время ревью рефакторинга, чтобы архитектура оставалась согласованной.

Чек-лист

Хорошо / плохо

// Плохо: смешение императивного и декларативного подходов для одного и того же стека
Navigator.of(context).push(...);
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];

// Хорошо: обновляйте только декларативное состояние
setState(() {
  _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
});
Совет по ревью

Во время ревью кода отслеживайте кто отвечает за изменения стека и отклоняйте изменения, которые меняют один и тот же стек через несколько API.

Предыдущая

Оверлеи

Следующая

Введение