HarmonyOS 应用开发《掌上英语》第48篇:学习进度追踪——从数据记录到可视化展示
学习进度追踪——从数据记录到可视化展示一、进度追踪的整体架构学习进度追踪是英语学习 App 的核心功能之一。用户需要知道今天学了多少、“总共学了多少”、“目标完成得怎么样”。本项目通过 LearningPlanManager 管理目标数据通过 CourseHomePage 和首页的 Progress 组件进行可视化展示。数据流如下用户答题 → recordWordStudy(count) ↓ LearningPlanManager ├── todayWordCount → 今日已学 ├── totalWordCount → 累计已学 ├── continuousDays → 连续天数 └── getTodayProgress() → 百分比 ↓ CourseHomePage / MainPage └── Progress 组件 → 可视化展示二、学习计划的定义2.1 LearningPlan 模型exportinterfaceLearningPlan{dailyWordGoal:number// 每日单词目标dailyListeningGoal:number// 每日听力目标分钟dailyReadingGoal:number// 每日阅读目标分钟continuousDays:number// 连续学习天数lastStudyDate:number// 最后学习日期时间戳todayWordCount:number// 今日已学单词todayListeningDuration:number// 今日已听时长todayReadingDuration:number// 今日已读时长totalWordCount:number// 总学习单词数totalStudyDuration:number// 总学习时长badges:string[]// 成就徽章// ... 提醒相关字段}默认计划DEFAULT_LEARNING_PLAN为每日 20 个单词、15 分钟听力、10 分钟阅读。2.2 数据记录入口在 AnswerQuestionsPage 完成答题后通过recordStudyData方法记录学习数据recordStudyData(){try{lettopicItemTypeListthis.toTopicItemTypeList(this.ques);// 1. 记录统计StatisticsManager.getInstance().calculateStatistics(topicItemTypeList,this.practiceDuration);// 2. 更新学习计划letplanManagerLearningPlanManager.getInstance();letansweredCountthis.ques.filter(itemitem.isAnswer).length;planManager.recordWordStudy(answeredCount);}catch(e){Logger.error(AnswerQuestionsPage,记录学习数据失败:${JSON.stringify(e)});}}recordWordStudy方法执行三个操作累加todayWordCount和totalWordCount调用checkAndUpdateContinuousDays更新连续天数调用checkAndUnlockBadges检查是否满足徽章解锁条件三、今日进度计算3.1 百分比计算publicgetTodayProgress():TodayProgress{try{letplanthis.getLearningPlan();letresult:TodayProgress{wordProgress:plan.dailyWordGoal0?Math.min(100,Math.floor(plan.todayWordCount/plan.dailyWordGoal*100)):0,listeningProgress:plan.dailyListeningGoal0?Math.min(100,Math.floor(plan.todayListeningDuration/plan.dailyListeningGoal*100)):0,readingProgress:plan.dailyReadingGoal0?Math.min(100,Math.floor(plan.todayReadingDuration/plan.dailyReadingGoal*100)):0};returnresult;}catch(e){Logger.error(LearningPlanManager,获取今日进度失败:${JSON.stringify(e)});return{wordProgress:0,listeningProgress:0,readingProgress:0};}}关键点Math.min(100, ...)防止进度超过 100%目标为 0 时返回 0%避免除零错误每个维度独立计算单词、听力、阅读3.2 首页进度卡展示在 CourseHomePage 中进度通过 Progress 组件展示Row(){Column(){Text(${this.learnedCount}/${this.totalCount}).fontSize(22).fontWeight(FontWeight.Bold).fontColor(#165DFF);Text(已学 / 总数).fontSize(11).fontColor($r(sys.color.font_secondary));}.layoutWeight(1);Column(){Text(今日需学 30 词).fontSize(13);Text(已完成${this.learnedCount}词).fontSize(11);}}Progress({value:this.getTodayProgress(),total:30,type:ProgressType.Linear}).width(100%).height(6).color(#165DFF).backgroundColor(#E8EEF8);这里使用了ProgressType.Linear线性进度条以30为每日目标总数value是当前已学数量。四、总进度统计4.1 学习统计摘要publicgetStudySummary():StudySummary{try{letplanthis.getLearningPlan();letresult:StudySummary{totalDays:plan.continuousDays,totalWords:plan.totalWordCount,totalDuration:plan.totalStudyDuration,badgeCount:plan.badges.length};returnresult;}catch(e){Logger.error(LearningPlanManager,获取学习统计摘要失败:${JSON.stringify(e)});return{totalDays:0,totalWords:0,totalDuration:0,badgeCount:0};}}这个摘要方法返回四个关键指标可以在学习报告页面统一呈现。4.2 学习报告中的 Dashboard 集成DashboardManager 也整合了进度数据publicrefreshData():void{letplanManagerLearningPlanManager.getInstance();letstatsManagerStatisticsManager.getInstance();letplanplanManager.getLearningPlan();letprogressplanManager.getTodayProgress();letsummarystatsManager.getHistoryStatistics();this.todayWordProgressprogress.wordProgress;this.todayListeningProgressprogress.listeningProgress;this.todayReadingProgressprogress.readingProgress;this.overallProgressMath.floor((this.todayWordProgressthis.todayListeningProgressthis.todayReadingProgress)/3);this.continuousDaysplan.continuousDays;this.weeklyDatathis.buildWeeklyData(plan);// ...}overallProgress是三个进度维度的平均值用于展示总体完成度。五、Progress 组件的两种形态5.1 线性进度条ProgressType.LinearProgress({value:13,total:30,type:ProgressType.Linear}).width(100).height(6).color(#165DFF).backgroundColor(#E8EEF8);适用场景展示单词学习进度、阅读进度。形态简洁适合嵌入卡片中。5.2 环形进度条ProgressType.RingProgress({value:65,total:100,type:ProgressType.Ring}).width(50).height(50).color(#165DFF).style({strokeWidth:4});适用场景首页今日学习卡中的总体进度。圆形视觉更醒目适合作为模块的视觉锚点。5.3 柱状图自定义实现DashboardManager 中的 WeeklyBarChart 不使用系统的 Progress 组件而是用 Row 组件模拟柱状图Column(){if(item.readingMin0){Row().width(20).height(this.barHeight(item.readingMin)).backgroundColor(#FF9800);}if(item.listeningMin0){Row().width(20).height(this.barHeight(item.listeningMin)).backgroundColor(#4CAF50);}if(item.wordCount0){Row().width(20).height(this.barHeight(item.wordCount)).backgroundColor(#2196F3);}}.height(120).justifyContent(FlexAlign.End);堆叠柱状条每种颜色代表一个维度的数据高度通过barHeight方法按比例计算。六、每日数据重置新的一天开始时需要重置今日学习数据publicresetDailyData():LearningPlan{try{letplanthis.getLearningPlan();plan.todayWordCount0;plan.todayListeningDuration0;plan.todayReadingDuration0;this.saveLearningPlan(plan);returnplan;}catch(e){Logger.error(LearningPlanManager,重置每日数据失败:${JSON.stringify(e)});returnthis.getLearningPlan();}}实际调用时机在checkAndUpdateContinuousDays中隐式完成——当检测到「最后学习日期不是今天」时新的记录会自然产生新的今日数据旧数据不再被引用。七、总结从 LearningPlanManager 的数据记录到 Progress 组件的可视化呈现学习进度追踪形成了一条完整的数据链路。三个维度的目标单词、听力、阅读、两种进度形态线性条、环形、以及柱状图等自定义图表共同构成了用户学习旅程的仪表盘让进步看得见。

相关新闻

多模态RAG技术:跨模态检索与生成实战解析

多模态RAG技术:跨模态检索与生成实战解析

1. 多模态RAG技术全景解析当我们在2023年观察到GPT-4V能够同时理解图像和文本时,一个关键问题随之浮现:如何让大语言模型突破纯文本的局限,真正实现多模态知识的融合与应用?这正是多模态RAG(Retrieval-Augmented Gener…

2026/8/15 2:58:24 阅读更多 →
智能体反思能力架构设计与工程实践

智能体反思能力架构设计与工程实践

1. 项目概述在AI领域,让智能体(Agent)具备反思能力是一个极具挑战性的前沿课题。不同于传统程序化的任务执行,具备反思能力的Agent能够像人类一样审视自己的行为、评估决策质量,并在后续行动中进行自我调整。这种能力对…

2026/8/16 13:31:22 阅读更多 →
像素即坐标:工业机器人视觉定位新方法

像素即坐标:工业机器人视觉定位新方法

1. 项目背景与核心价值去年在给工业机器人做视觉定位系统升级时,我发现传统坐标系转换方法存在一个致命缺陷:当摄像头与机械臂安装角度超过45度后,定位误差会呈指数级增长。这个问题困扰了我整整三个月,直到偶然看到女儿玩的《我的…

2026/8/11 1:53:07 阅读更多 →

最新新闻

5分钟彻底吃透Photoshop图层批量导出:Export Layers To Files Fast 一键提速10倍实战手册

5分钟彻底吃透Photoshop图层批量导出:Export Layers To Files Fast 一键提速10倍实战手册

5分钟彻底吃透Photoshop图层批量导出:Export Layers To Files Fast 一键提速10倍实战手册 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in s…

2026/8/16 18:26:46 阅读更多 →
FastAPI-Azure-Auth 单租户认证完整教程:一步步配置 Azure Entra ID 应用注册

FastAPI-Azure-Auth 单租户认证完整教程:一步步配置 Azure Entra ID 应用注册

FastAPI-Azure-Auth 单租户认证完整教程:一步步配置 Azure Entra ID 应用注册 【免费下载链接】fastapi-azure-auth Easy and secure implementation of Azure Entra ID (previously AD) for your FastAPI APIs 🔒 B2C, single- and multi-tenant suppor…

2026/8/16 18:26:46 阅读更多 →
PFC各向异性后处理技术与工程应用解析

PFC各向异性后处理技术与工程应用解析

1. PFC各向异性后处理的核心价值 在颗粒流模拟领域,PFC(Particle Flow Code)作为一款基于离散元方法的专业软件,其各向异性分析功能一直是岩土工程和材料科学研究的重要工具。但很多用户在完成基础模拟后,往往面临&quo…

2026/8/16 18:26:46 阅读更多 →
PFC各向异性后处理:颗粒流模拟中的方向性力学分析

PFC各向异性后处理:颗粒流模拟中的方向性力学分析

1. 项目概述:PFC各向异性后处理的核心价值 在颗粒流模拟领域,PFC(Particle Flow Code)作为一款基于离散元方法的专业软件,其强大的颗粒间相互作用模拟能力使其在岩土工程、地质力学、材料科学等领域广受青睐。而各向异…

2026/8/16 18:26:46 阅读更多 →
Git高效使用指南:从基础到高阶技巧

Git高效使用指南:从基础到高阶技巧

1. Git核心操作全景指南 作为分布式版本控制系统的事实标准,Git已经渗透到现代开发的每个环节。但很多开发者对Git的理解仍停留在"add-commit-push"三板斧阶段,这就像只掌握了汽车的启动、刹车和方向盘,却不知道如何应对复杂路况。…

2026/8/16 18:26:46 阅读更多 →
从BIO/NIO/AIO到Netty:Java网络编程IO模型演进与实践

从BIO/NIO/AIO到Netty:Java网络编程IO模型演进与实践

1. 为什么需要从BIO/NIO/AIO开始学Netty? 作为Java开发者,当我们第一次接触Netty框架时,往往会直接跳入各种Handler、Pipeline的配置中。但很快就会发现,如果不理解底层IO模型的工作原理,遇到性能瓶颈或异常时根本无从…

2026/8/16 18:25:46 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →