需要避免的反模式。

大多数问题都发生在命令式与声明式模型被混用时。请保持严格的状态边界。

不要把 push/pop 与页面混用

对于已经由 List<PageEntry> 管理的堆栈,不要再调用 Navigator.push/pop。

不要把 Widget 放进状态

不要把 Widget 实例放进页面元数据里,只保留 key 和类似路由的标识。

不要使用无边界键值

不要在同一个堆栈中重复使用 PageEntry.key。

迁移清单

在重构审查时使用这份清单,以保持架构一致。

检查清单

正确与错误

// 错误:对同一个堆栈同时混用命令式与声明式
Navigator.of(context).push(...);
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];

// 正确:只更新声明式状态
setState(() {
  _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
});
审查提示

在代码审查时,关注 谁在负责堆栈变更 并拒绝通过多个接口修改同一堆栈的变更。

上一页

叠层

下一页

简介