Анти-патерни, които да избягвате

Повечето бъгове се появяват, когато се смесят императивният и декларативният модел. Дръжте ясна граница на състоянието.

Смесване на 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.

Предишна

Оверлеи

Следваща

Въведение