Антипаттерны, которых стоит избегать
Большинство багов возникает, когда смешиваются императивная и декларативная модели. Сохраняйте жёсткую границу состояния.
Смешение 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.