【OpenHarmony/HarmonyOs 】数学学习报告页本地统计卡片、正确率与隐私友好学习画像项目类型OpenHarmony / HarmonyOS ArkTS 数学学习应用项目名称数学视界对应主题端侧 AI、隐私保护方案、全场景智慧生活关键词ArkTS、学习报告、本地统计、正确率、学习画像、隐私保护 一、为什么学习报告页要本地化学习报告很有价值但也很敏感。它可能包含学习天数连续学习记录挑战次数正确率计算次数公式浏览学习时长历史最高分答题数量。这些数据能够反映用户的学习习惯和薄弱环节。如果每次生成报告都上传到服务器就会带来隐私风险。数学视界项目选择的是本地统计所有报告数据都来自AppState在端侧生成在本地展示。二、我的页面学习报告的入口MyPage.ets中的页面结构如下build() { Stack() { Scroll() { Column() {this.buildHeader()this.buildStatsCards()this.buildGoalSection()this.buildDataSection()this.buildSettingsSection()this.buildFeedbackSection()this.buildVersionInfo() } } } }可以看到“我的”页面不仅是设置页也承担了学习报告功能顶部展示 App 和用户状态统计卡片展示关键数据今日目标展示学习进度学习数据展示更细的行为指标设置和反馈入口提供管理能力。三、统计卡片让用户快速看到学习状态统计卡片包括学习天数、连续学习、挑战次数、正确率、计算次数、公式浏览等。卡片构建函数BuilderbuildStatCard(emoji: string,label: string,value: string,bgColor: string,textColor: string ) { Column() { Text(emoji).fontSize(20) Text(value).fontSize(20).fontWeight(FontWeight.Bold).fontColor(textColor) Text(label).fontSize(11).fontColor(this.getColor(#95A5A6, #888888)) } }这种设计适合移动端每张卡片只展示一个指标用户扫一眼就能理解。四、正确率端侧统计不上传答案正确率通过挑战统计计算getAccuracyRate():string{conststats AppState.challengeStatsif(stats.totalQuestions 0)return—constrate:number Math.round((stats.totalCorrect / stats.totalQuestions) *100)returnrate %}这里用到的数据是totalCorrect累计正确题数totalQuestions累计答题数。它不需要把每道题上传到云端只要本地累计即可生成整体正确率。五、学习数据区从工具行为到学习画像学习数据区展示更细指标this.buildDataRow(,趣味百科已读, AppState.studyData.funFactsViewed 篇,#EBF5FF,#3498DB)this.buildDataRow(,单位换算次数, AppState.studyData.totalUnitsConverted 次,#F5EEF8,#9B59B6)this.buildDataRow(⏱️,累计学习时长,this.formatTotalTime(AppState.challengeStats.totalTimeSpent),#FEF9E7,#E67E22)this.buildDataRow(,历史最高分, AppState.challengeStats.bestScore 0? AppState.challengeStats.bestScore 分:—,#EAFAF1,#2ECC71)this.buildDataRow(,累计答题数, AppState.challengeStats.totalQuestions 题,#FDECEA,#E74C3C)这些指标把不同模块串起来趣味百科阅读单位换算挑战答题学习时长历史最高分。也就是说报告页不是单一题库报表而是整个数学学习行为的总览。六、DataRow报告项的统一呈现每一行学习数据通过统一组件展示BuilderbuildDataRow(emoji: string,label: string,value: string,bgColor: string,accentColor: string ) { Row() { Text(emoji).fontSize(16).width(32) Text(label).fontSize(14).fontColor(this.getColor(#34495E, #FFFFFF)).flexGrow(1) Text(value).fontSize(13).fontWeight(FontWeight.Medium).fontColor(accentColor) } }统一组件的好处是后续新增指标很方便视觉风格保持一致深色模式适配集中处理数据项不会显得杂乱。七、学习报告和端侧 AI 的关系“端侧 AI”不一定等于大模型。对学习 App 来说端侧分析本身就是智能能力计算正确率统计学习时长分析连续学习判断目标是否完成识别最近学习行为生成学习建议。例如可以基于正确率生成建议functionbuildReportSuggestion(rate: number): string {if(rate 60)return建议优先复习错题和基础知识if(rate 80)return掌握不错可以继续专项练习return表现优秀可以尝试更高难度挑战}这类逻辑完全可以在本地完成解释性也更强。八、隐私保护学习画像不出端学习报告中最敏感的不是姓名而是行为数据哪些题错了学习多久正确率多少有没有坚持哪些模块用得多。数学视界当前通过AppState本地管理conststats AppState.challengeStatsconstdata AppState.studyData报告页只是读取这些本地对象不需要网络也不需要用户登录。这样就能降低隐私风险。九、全场景扩展报告页可以拆成小卡片学习报告很适合全场景展示但不一定要展示完整页面。可以拆成轻量卡片场景展示内容桌面卡片今日进度、连续学习元服务本周正确率、今日目标平板页面完整学习报告实况窗结束态本次挑战分数与用时这样不同设备看到的是不同粒度的数据而不是简单复制页面。十、总结这篇文章围绕数学视界的学习报告页展开重点是本地统计和隐私友好学习画像。核心实现包括 用buildStatsCards()展示关键学习指标 用getGoalProgress()展示今日目标进度✅ 用getAccuracyRate()计算整体正确率 用buildDataSection()汇总阅读、换算、答题、时长等数据 用统一buildDataRow()保持报告项风格一致 学习报告全部从本地AppState读取不上传学习画像 后续可扩展为桌面卡片、元服务和实况窗结束态。学习报告不是为了制造焦虑而是帮助用户看到自己的积累。对教育类 App 来说本地化报告是一条更稳、更可信的路线。✨