Anti-padrões a evitar

A maioria dos bugs acontece quando os modelos imperativo e declarativo são misturados. Mantenha uma fronteira rígida de estado.

Mistura de push/pop com páginas

Não chame Navigator.push/pop para pilhas que já são controladas por List<PageEntry>.

Widget no estado

Não coloque instâncias de Widget nos metadados da página. Mantenha apenas chaves e identificadores no estilo de rotas.

Chaves duplicadas

Não reutilize valores duplicados de PageEntry.key na mesma pilha.

Lista de verificação de migração

Use esta lista de verificação durante as revisões de refatoração para manter a arquitetura consistente.

Lista de verificação

Bom vs. ruim

// Ruim: misturar o imperativo e o declarativo para a mesma pilha
Navigator.of(context).push(...);
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];

// Bom: atualize apenas o estado declarativo
setState(() {
  _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
});
Dica de revisão

Durante a revisão de código, acompanhe quem é responsável pelas mutações da pilha e rejeite mudanças que alterem a mesma pilha por meio de várias APIs.