学习计划表:鸿蒙AI应用开发实战——AI学习规划,高效备考不焦虑v
学习计划表:鸿蒙AI应用开发实战——AI学习规划,高效备考不焦虑
一、引言
“我要学习!”——这是很多人立下的flag,但真正执行起来却困难重重。没有明确的学习计划、不知道每天学什么、如何分配时间,这些问题往往导致学习效率低下、半途而废。
学习计划表 正是为了解决这一痛点而诞生的鸿蒙AI应用。用户只需输入科目名称、选择学习天数(1-30天)和每天学习时长,AI即可根据4阶段学习法(基础30%/核心35%/实战25%/复习10%)自动生成按天分解的学习任务表,让学习计划变得科学、可执行。
本文将从应用架构设计、鸿蒙核心技术实现、AI应用亮点等维度,深度剖析这款应用的开发全流程。

二、应用架构设计:Model-Service-Page 三层架构
2.1 架构概览
┌─────────────────────────────────────────────────────────┐
│ Page 层 (UI) │
│ StudyPlanPage.ets │
│ @State 动态生成 / Stepper 天数 / Slider 时长 / Scroll│
├─────────────────────────────────────────────────────────┤
│ Service 层 (业务逻辑) │
│ StudyPlanService.ets │
│ 4阶段学习法 / 任务分配算法 / 动态天数适应 │
├─────────────────────────────────────────────────────────┤
│ Model 层 (数据模型) │
│ StudyPlanModel.ets │
│ DayPlan / PhasePlan / StudyData / SPMessage │
└─────────────────────────────────────────────────────────┘
2.2 Model 层:数据结构定义
核心数据类:
DayPlan:单日学习计划,包含天号和任务列表PhasePlan:学习阶段,包含名称、比例和任务模板StudyData:完整学习计划,包含每日计划列表
关键常量:
SP_DAYS_RANGE:最大天数范围30
2.3 Service 层:4阶段学习算法
Service 层实现了基于4阶段学习法的计划生成算法:
getStudyPlan(subject: string, days: number, hoursPerDay: number): StudyData {
const phases: PhasePlan[] = [
new PhasePlan('基础入门', 0.3, ['学习基础概念和术语', '阅读入门教材/文档', '搭建学习环境/工具']),
new PhasePlan('核心知识', 0.35, ['深入学习核心知识点', '动手练习经典案例', '整理笔记和思维导图']),
new PhasePlan('实战应用', 0.25, ['完成实战项目', '解决实际场景问题', '总结踩坑经验']),
new PhasePlan('复习巩固', 0.1, ['回顾重点难点', '整理错题/问题集', '模拟测试/面试准备'])
]
// 按比例分配天数,生成每日计划
}
2.4 Page 层:UI展示
Page 层实现了科目输入、天数选择、时长选择等交互,以及按天分解的学习计划展示。
三、鸿蒙技术深度解析
3.1 @State 动态生成计划
本应用的核心状态管理围绕科目、天数和时长展开:
@State selectedSubject: string = '' // 科目名称
@State selectedDays: number = 7 // 学习天数
@State selectedHours: number = 2 // 每天学习时长
@State currentData: StudyData | null = null // 生成的学习计划
@State isLoading: boolean = false // 加载状态
动态生成流程:
- 用户输入科目名称、选择天数和每天时长
- 点击"生成学习计划"按钮
- Service 层根据三个参数计算每日任务
- 结果通过 @State 驱动 UI 渲染
private onGenerate(): void {
this.isLoading = true
this.currentData = null
setTimeout(() => {
const data = this.service.getStudyPlan(this.selectedSubject, this.selectedDays, this.selectedHours)
this.currentData = data
this.isLoading = false
}, 1500)
}
3.2 Stepper 天数选择 + Slider 时长选择
本应用同时使用了两种选择器——Slider 用于天数选择和时长选择:
天数选择(1-30天,步进1):
Slider({
value: this.selectedDays,
min: 1, max: 30, step: 1,
style: SliderStyle.InSet
})
.blockColor(COLOR_PRIMARY)
.onChange((value: number) => { this.selectedDays = value })
时长选择(1-8小时,步进1):
Slider({
value: this.selectedHours,
min: 1, max: 8, step: 1,
style: SliderStyle.InSet
})
.blockColor(COLOR_PRIMARY)
.onChange((value: number) => { this.selectedHours = value })
双Slider的设计要点:
- 天数范围1-30,覆盖短期冲刺到长期规划
- 时长范围1-8小时,覆盖轻度学习到深度学习
- 当前值实时显示:
Text('当前:${this.selectedDays}天')和Text('当前:每天${this.selectedHours}小时') - 两个 Slider 相互独立,互不影响
3.3 Scroll 滚动展示
学习计划可能包含30天的内容,使用 Scroll 确保完整展示:
if (this.currentData !== null) {
Scroll() {
Column() {
this.buildResultCard(this.currentData)
}
.padding({ bottom: 20 })
}
.layoutWeight(1)
.scrollBar(BarState.Off)
}
3.4 ForEach 渲染每日计划
每日计划使用 ForEach 循环渲染,每行包含天号和任务列表:
ForEach(data.plan, (dayPlan: DayPlan, idx: number) => {
Column() {
Row() {
Column() {
Text('D${dayPlan.day}')
// 圆形天号标识
}
Column() {
ForEach(dayPlan.tasks, (task: string) => {
Text('• ${task}')
})
}
}
}
// 卡片样式
.backgroundColor(idx % 2 === 0 ? COLOR_SELECTED_BG : COLOR_CARD)
})
设计亮点:
- 天号使用圆形标识(D1、D2、D3…),视觉突出
- 任务列表使用圆点前缀,清晰可辨
- 交替背景色(奇偶行不同),提高可读性
四、AI 应用亮点分析
4.1 4阶段学习法
应用采用科学规划的4阶段学习法,将学习过程分为四个阶段:
阶段1:基础入门 — 30% 时间
- 学习基础概念和术语
- 阅读入门教材/文档
- 搭建学习环境/工具
阶段2:核心知识 — 35% 时间
- 深入学习核心知识点
- 动手练习经典案例
- 整理笔记和思维导图
阶段3:实战应用 — 25% 时间
- 完成实战项目
- 解决实际场景问题
- 总结踩坑经验
阶段4:复习巩固 — 10% 时间
- 回顾重点难点
- 整理错题/问题集
- 模拟测试/面试准备
4阶段学习法的科学性:
- 基础入门(30%):打好基础,建立知识框架
- 核心知识(35%):投入最多时间,深入掌握核心内容
- 实战应用(25%):通过实践巩固知识,提升应用能力
- 复习巩固(10%):查漏补缺,强化记忆
4.2 任务时长自动分配
系统根据每天的学习时长和任务数量,自动计算每个任务的分配时间:
const totalMinutesPerDay = hoursPerDay * 60
const taskCount = phases[p].tasks.length
const minutesPerTask = Math.round(totalMinutesPerDay / taskCount)
分配示例(每天2小时=120分钟,每个阶段3个任务):
- 每个任务:120 ÷ 3 = 40分钟
- 任务描述:
'学习基础概念和术语(40分钟)'
4.3 动态天数适应
系统根据用户选择的总天数,按比例分配到4个阶段,并确保每个阶段至少分配1天:
for (let p = 0; p < phases.length; p++) {
const phaseDays = Math.max(1, Math.round(days * phases[p].ratio))
const phaseEnd = Math.min(dayIndex + phaseDays - 1, days)
// 生成该阶段每天的详细任务
}
天数分配示例(总天数=30天):
- 基础入门:30 × 30% = 9天
- 核心知识:30 × 35% = 10天(四舍五入)
- 实战应用:30 × 25% = 8天(四舍五入)
- 复习巩固:30 × 10% = 3天
天数分配示例(总天数=5天):
- 基础入门:max(1, 5×30%) = 2天
- 核心知识:max(1, 5×35%) = 2天
- 实战应用:max(1, 5×25%) = 1天
- 复习巩固:max(1, 5×10%) = 1天
五、关键技术挑战与解决方案
5.1 挑战一:4阶段的时间分配
挑战:需要将总天数按比例分配到4个阶段,同时确保整数天数和至少1天。
解决方案:
- 使用
Math.round进行四舍五入取整 - 使用
Math.max(1, ...)确保每个阶段至少1天 - 使用
Math.min(phaseEnd, days)防止超出总天数 - 使用
dayIndex变量追踪当前分配进度
5.2 挑战二:每日任务的分钟数分配
挑战:需要将每天的学习时长均匀分配到各个任务上。
解决方案:
- 将小时转换为分钟(
hoursPerDay * 60) - 除以任务数量得到每个任务的分钟数
- 使用
Math.round处理取整 - 任务描述中附带分钟数,方便用户执行
5.3 挑战三:大量数据的滚动展示
挑战:30天的学习计划内容量大,需要高效渲染。
解决方案:
- 使用 Scroll 组件支持纵向滚动
- 每日计划使用 ForEach 循环渲染
- 交替背景色提高可读性
- 隐藏滚动条保持界面清爽
六、用户交互体验设计
6.1 靛色的学习主题
应用采用靛蓝色系配色(#EEF2FF背景、#6366F1主题色),传达专业、专注的学习氛围:
const COLOR_BG = '#EEF2FF'
const COLOR_PRIMARY = '#6366F1'
const COLOR_SELECTED_BG = '#E0E7FF'
6.2 清晰的三步配置
- 输入科目名称:TextInput 输入
- 选择学习天数:Slider 选择1-30天
- 选择每天时长:Slider 选择1-8小时
6.3 时间线式结果展示
每日计划以时间线样式展示:
- 天号使用圆形标识(D1, D2, D3…)
- 任务列表使用圆点前缀
- 交替背景色增强可读性
- 每天的任务包含具体的分钟数分配
七、总结
学习计划表 应用展示了鸿蒙 ArkTS 在教育领域的应用潜力,三个核心技术亮点值得关注:
- 4阶段学习法算法:基础30%/核心35%/实战25%/复习10%的科学时间分配
- 双Slider参数选择:天数选择和时长选择两个 Slider 的联动使用
- 动态天数适应:根据总天数自动分配各阶段的时间,确保计划合理性
未来展望:未来可以引入更多学习法(如番茄工作法、费曼学习法)、支持自定义学习阶段、添加学习进度追踪、学习成果统计、AI智能调整学习计划等功能,打造更完整的智能学习规划工具。
更多推荐



所有评论(0)