页面即数据,UI 由解析器生成。

只在 PageEntry 中保存元数据。使用 buildPage 把每个页面 key 映射到真实 widget。

可序列化状态

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 保持为纯元数据,以提升可维护性。

上一页

安装

下一页

Resolver