Антипатерни, яких слід уникати

Більшість багів виникає, коли змішують імперативну й декларативну моделі. Дотримуйтеся чіткої межі стану.

Змішування 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.

Наступний

Вступ