本文分享了 B 站技术团队使用 Google 最新 Navigation3 导航库在 Compose Multiplatform (CMP) 环境下进行宽屏适配的实战经验与避坑指南。
📝 详细摘要
文章深入探讨了 B 站大前端团队为何选择 Navigation3 作为纯 Compose 导航框架,旨在解决 CMP 跨平台开发中原生容器带来的内存压力及生命周期不匹配问题。作者详细介绍了 Navigation3 的核心理念——将导航栈视为普通数据列表(f(data)=UI),并展示了如何通过 NavKey 桥接现有路由系统、利用 SceneStrategy 实现基于 WindowSizeClass 的断点式宽屏适配。此外,文章还针对单 Activity 架构下的状态保存、系统 UI 收集机制、返回事件处理及原生 Fragment 嵌入等实际工程问题提供了具体的代码实现方案和底层原理分析。
💡 主要观点
- Navigation3 实现了导航栈的声明式管理,将 f(data)=UI 理念延伸至页面层级。 Nav3 不再内置复杂的 NavGraph,而是让开发者直接操作 List。框架仅负责根据栈内容渲染 UI,这种精简设计使其能轻松整合进现有的路由系统。
💬 文章金句
- Navigation3 将导航栈的管理权完全交给开发者,框架只负责「根据栈内容渲染 UI」,将 f(data)=UI 的理念扩展到了页面导航栈上。
- 在纯 Compose 世界内的页面导航切换范围内,我们需要一个纯 Compose 的导航框架。
- 这一次跳转动作应当分为两个具体步骤:使用「路由」寻找这个 URI 对应的页面信息,然后使用「导航」组件将这个页面展现在用户面前。
- 在单 Activity 页面导航框架中,SystemUI 配置(如状态栏颜色)如果允许每个页面、每个组件自由控制,将很容易出现 UI 闪烁等情况。
📊 文章信息
AI 评分:89
来源:哔哩哔哩技术
作者:哔哩哔哩技术
分类:软件编程
语言:中文
阅读时间:29 分钟
字数:7162
标签: Compose Navigation3, Android, CMP, 屏幕适配, Bilibili