羽毛球教程 HarmonyOS 学习应用(01):学习、收藏与我的三栏架构
一、三栏的真实边界学习、收藏与我的羽毛球学习应用的主框架并不把每个功能都塞进底部导航。可高频切换、需要保留当前状态的三个顶层域固定为“学习、收藏、我的”课程详情、搜索、练习记录、学习进度和测验等页面则从对应顶层域继续进入。这种划分首先解决信息架构问题学习页负责内容发现与进度入口收藏页承接用户主动保存的课程我的页面汇总个人数据与工具入口。练习记录虽然重要但它是个人学习数据的一部分不应与三个顶层域争夺常驻位置。顶层域主要内容保留的状态继续进入的页面学习模块、搜索、课程进度当前模块和学习统计分类、详情、测验、进度收藏已收藏课程收藏集合课程详情我的个人资料与工具账号展示、主题、统计练习记录、笔记、设置二、TabDef 让文案、标识和顺序只定义一次主框架先用一个小模型描述三个入口。手机底栏和平板侧栏都遍历同一个TABS因此不会出现手机端叫“收藏”、平板端却叫“练习”的分叉。interface TabDef { id: string label: string emoji: string } type TabId home | favorite | profile const TABS: TabDef[] [ { id: home, label: 学习, emoji: }, { id: favorite, label: 收藏, emoji: ❤ }, { id: profile, label: 我的, emoji: } ] const DEFAULT_TAB: TabId home function isTabId(value: string): value is TabId { return TABS.some(tab tab.id value) }id是稳定业务身份label和emoji只是展示属性。后续若替换为 Symbol 或资源图标只需改变显示字段不必改动页面切换条件。状态字段直接驱动界面刷新的规则可对照华为官方的 State 状态管理说明这里使用应用级链接状态是因为同一入口需要被不同布局共同读取。三、active_tab 是手机和平板共享的单一状态当前入口通过StorageLink(active_tab)连接到应用级状态。点击任意导航项只修改这个字符串页面内容和选中样式都直接读取它。StorageLink(active_tab) activeTab: string home private selectTab(tabId: string): void { this.activeTab tabId } // 导航项 .onClick(() this.selectTab(t.id))这比为三个按钮分别维护homeSelected、favoriteSelected、profileSelected更安全。单一值天然排除了“两个入口同时高亮”或“内容切换了但导航没切换”的非法组合。四、手机底栏只负责切换顶层内容小屏布局采用纵向结构内容区占据剩余高度底栏保持固定。内容判断和选中颜色都绑定到activeTab不依赖缓存的页面对象。Column() { Column() { if (this.activeTab home) { HomePage() } else if (this.activeTab favorite) { FavoritePage() } else { ProfilePage() } } .layoutWeight(1) .width(100%) this.bottomTabs() }底栏使用稳定的t.id作为ForEach键。列表顺序没有变化时ArkUI 可以复用导航项状态变化只更新颜色、字重和当前内容。五、平板侧栏复用状态不复制业务断点为小屏时渲染底栏其余断点切换为 220 vp 侧栏。两种布局只改变导航位置页面组件与状态源保持一致。StorageProp(breakpoint) breakpoint: Breakpoint sm build() { if (this.breakpoint sm) { this.phoneLayout() } else { this.tabletLayout() } } // 侧栏仍然使用同一个 activeTab .backgroundColor( this.activeTab t.id ? this.palette.badgeBg : Color.Transparent )这类响应式实现的关键不是“做两套页面”而是保持状态合同不变。窗口变宽时用户仍停留在原来的学习、收藏或我的页面不需要重新导航。六、顶层切换与路由跳转不能混为一层三栏切换适合高频、对等、可保留状态的顶层内容详情页则需要参数、返回栈与明确的生命周期应使用路由跳转。两者职责如下动作状态载体返回行为适用范围切换三栏active_tab再次点击即可切回顶层学习域打开课程详情路由参数courseId返回原列表单个课程打开测验路由参数moduleId返回模块模块内任务打开练习编辑可选logId返回记录列表新增或编辑如果把详情也做成 Tab返回栈、深层参数和状态恢复都会变得含糊如果把三个顶层入口全部做成路由频繁切换又会制造不必要的页面重建。七、异常状态要落在各自页面而不是主框架主框架只负责“显示哪个顶层域”。收藏为空、课程加载失败、资料字段缺失等问题由各页面自己渲染。这样一个页面的空状态不会让整个导航失效。导航层只需要守住三条边界1.activeTab只能取home、favorite、profile。 2. 未知值降级到“我的”之前应在初始化阶段归一化避免悄悄展示错误页面。 3. 断点变化只切换布局不能清空当前入口或用户数据。可以把允许值检查收敛到主框架入口避免持久化旧版本值或其他页面误写后进入不确定分支private normalizeTab(value: string): string { const allowed: string[] [ home, favorite, profile ] if (allowed.indexOf(value) 0) { return value } return home } aboutToAppear(): void { this.activeTab this.normalizeTab(this.activeTab) }降级到学习页比直接走最后一个else更明确未知值不会被误认为“我的”日志和测试也能准确定位是状态归一化触发而不是用户主动选择。八、从运行界面验证状态与布局手机运行界面可直接观察到三项结果底部标签为“学习、收藏、我的”学习入口高亮时首页模块和统计可见底栏固定在安全区域之上。验收还应覆盖以下路径1. 连续切换三个入口内容与高亮必须同步。 2. 从收藏进入课程详情再返回仍停留在收藏。 3. 从我的进入练习记录再返回仍停留在我的。 4. 调整窗口到平板断点导航改为侧栏但当前入口不变。 5. 切换深浅色主题选中态、分割线和文字仍可辨认。还要观察页面生命周期的副作用。切换 Tab 会重新进入对应组件时首页的当日学习标记应该去重收藏页不应重复装载同一集合我的页面也不应因为每次切回就追加统计。连续快速点击当前入口时界面保持稳定不创建额外路由记录应用恢复到前台后当前入口与主题状态仍与离开前一致。九、三栏架构的扩展规则新增功能时先判断它是否真的是与学习、收藏、我的对等的顶层域。只有高频、独立且需要常驻切换的内容才进入TABS课程工具、个人数据和一次性任务继续放在所属页面的路由下。这样导航数量不会随功能堆积手机和平板也能持续复用同一份状态。工程评审时可沿三条线检查数据线确认三个页面消费的共享状态没有被主框架复制交互线确认高亮、内容和返回位置只受一个入口值控制适配线确认断点只改变导航容器而不改变业务页面。三条线都成立后续替换图标、增加大字体或调整侧栏宽度才不会破坏顶层导航合同。

相关新闻

Docker Swarm自动扩缩容与负载均衡实战指南

Docker Swarm自动扩缩容与负载均衡实战指南

1. Docker Swarm集群自动扩缩容与负载均衡实战在容器化部署的实践中,单节点Docker已经无法满足生产环境的高可用需求。上周我们团队刚处理了一个线上事故——某电商促销期间流量激增导致容器实例崩溃,这就是典型的缺乏自动扩缩容能力的表现。今天要分享的…

2026/7/26 14:46:15阅读更多 →
CC32xx通用定时器GPTM:从心跳到PWM与DMA协同实战

CC32xx通用定时器GPTM:从心跳到PWM与DMA协同实战

1. 通用定时器GPTM:嵌入式系统的“心跳”与“节拍器”在嵌入式系统开发中,无论是驱动一个LED闪烁,还是控制一个无刷电机的精确转速,亦或是为通信协议生成精准的时序,其背后都离不开一个核心外设——通用定时器。你可以…

2026/7/26 14:46:15阅读更多 →
谷歌云TPU:AI基础设施的核心引擎与实战指南

谷歌云TPU:AI基础设施的核心引擎与实战指南

如果你最近关注云计算市场,可能会注意到一个有趣的现象:谷歌云(Google Cloud)的财报表现持续亮眼,而背后真正的增长引擎可能和你想象的不太一样。传统认知中,云服务收入主要来自虚拟机租赁、对象存储和数据…

2026/7/26 14:46:15阅读更多 →
怎么把多个pdf合并成一个?页序对了,合并才算真正完成

怎么把多个pdf合并成一个?页序对了,合并才算真正完成

上个月帮同事交社保证明材料,窗口要求「合成一个 PDF 上传」。他手机里是扫描件,一页一个文件,一共 9 个,文件名还是 IMG_001 那种乱序。我先在青蓝PDF转换里按「封面—身份页—缴纳记录—签字页」排好再合并,一次过审…

2026/7/26 16:16:51阅读更多 →
epub电子书怎么转成pdf?打印、跨设备分享前先把版式定死

epub电子书怎么转成pdf?打印、跨设备分享前先把版式定死

去年冬天我在旧书店捡到一本绝版散文集的电子版,下载下来却是 epub。想周末在家打印装订,用手机阅读器一放大字号,段落就重新折行,页码和纸质书对不上;想发给家里还在用老款电纸书的亲戚,对方设备只认 PDF&…

2026/7/26 16:16:51阅读更多 →
Cursor AI Pro破解技术深度解析:智能绕过试用限制的完整解决方案

Cursor AI Pro破解技术深度解析:智能绕过试用限制的完整解决方案

Cursor AI Pro破解技术深度解析:智能绕过试用限制的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reache…

2026/7/26 16:16:51阅读更多 →
JD-GUI:Java字节码反编译的终极指南,让.class文件开口说话

JD-GUI:Java字节码反编译的终极指南,让.class文件开口说话

JD-GUI:Java字节码反编译的终极指南,让.class文件开口说话 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 核心关键词:Java反编译工具、字节码查看器、.class文件分析…

2026/7/26 16:16:51阅读更多 →
Foomchat:动态界面生成的AI聊天工具实践指南

Foomchat:动态界面生成的AI聊天工具实践指南

如果你最近在尝试各种 AI 对话工具,可能会发现一个有趣的现象:无论是 ChatGPT、Claude 还是国内的豆包、DeepSeek,它们的界面都越来越像——左侧是对话历史列表,中间是输入框,右侧是回复区域。这种设计确实清晰&#x…

2026/7/26 16:16:51阅读更多 →
智能对话系统架构创新与工程实践

智能对话系统架构创新与工程实践

1. 智能对话系统的现状与挑战 当前主流智能对话系统普遍采用"意图识别→实体抽取→对话管理→响应生成"的流水线架构。这种架构虽然成熟稳定,但在实际落地过程中暴露了三个致命缺陷: 首先是上下文断裂问题。传统架构将对话过程切割成独立模块…

2026/7/26 16:14:51阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/25 19:03:04阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/25 19:03:04阅读更多 →