避けるべきアンチパターン

不具合の多くは、命令的モデルと宣言的モデルを同時に使ってしまうことから発生します。

push/popとpagesの混在

同じスタックを Navigator.push/pop と List<PageEntry> の両方で更新しないでください。

Widgetを状態に保持

ページ状態にはWidget本体を入れず、識別子とメタデータのみに限定します。

重複キー

同一スタックで同じ PageEntry.key を再利用すると、予期しない再構築が起こります。

移行チェックリスト

レビュー時にこのチェックを通すと、宣言的設計の崩れを早期に検出できます。

チェック要点

Bad / Good 例

// Bad: 同じスタックを命令的と宣言的の両方で更新
Navigator.of(context).push(...);
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];

// Good: 宣言的な状態更新に統一
setState(() {
  _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
});
レビュー観点

コードレビューでは スタック更新の責務が1箇所か を必ず確認してください。