Анти-патерни, които да избягвате
Повечето бъгове се появяват, когато се смесят императивният и декларативният модел. Дръжте ясна граница на състоянието.
Смесване на 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.