可序列化状态
PageEntry 只是普通数据,因此导航状态可以被记录、比较和回放。
简单解析器
对 page.key 的 switch 处理,可以让路由保持显式且可审查。
唯一真相来源
push 与 pop 只是 _pages 上的列表操作,不是副作用。
解析器模式
按页面 key 构建,并以声明式方式变更页面列表。
页面状态规则
解析器示例
Widget _buildPage(BuildContext context, PageEntry page) {
switch (page.key) {
case 'home':
return HomePage(onGoDetail: _goDetail);
case 'detail':
return const DetailPage();
default:
return const SizedBox.shrink();
}
}
void _goDetail() {
setState(() => _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')]);
}
保持元数据精简
避免把 Widget 实例放进导航状态里 并让 PageEntry 保持为纯元数据,以提升可维护性。