【Flutter for OpenHarmony】实战 - Day 5(2): 周课表视图及后续功能开发
本文介绍了开源鸿蒙跨平台课程表项目的功能开发进展。项目已完成周课表视图切换、网格布局和交互功能,上课时间设置模块全部完成,临时课程功能的数据模型和UI也已实现。但存在两个关键问题:课程添加弹窗提交无响应和临时课程提交失败。下一步将重点调试弹窗提交逻辑,验证数据传递流程,并添加调试日志定位问题。项目代码已开源,欢迎加入社区参与开发。
·
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
本项目代码仓库地址:https://atomgit.com/Krneide/my_class_schedule
一、周课表视图功能
1.1 视图切换
| 功能 | 状态 | 说明 |
|---|---|---|
状态变量 _isWeekTableMode |
✅ 完成 | 控制视图模式切换 |
| 右上角切换按钮 | ✅ 完成 | 图标切换(列表/网格) |
| 视图切换逻辑 | ✅ 完成 | 列表 ↔ 周课表 自由切换 |
1.2 周课表网格布局
| 特性 | 状态 | 说明 |
|---|---|---|
| 5节×5天网格布局 | ✅ 完成 | 周一至周五,第1-5节 |
| 跨节课程显示 | ✅ 完成 | 起始节次到结束节次合并显示 |
| 周次联动 | ✅ 完成 | 根据所选周次筛选课程 |
1.3 交互功能
| 操作 | 状态 | 说明 |
|---|---|---|
| 空单元格添加 | ✅ 完成 | 点击➕弹窗,自动填充星期和节次 |
| 已有课程点击 | ✅ 完成 | 弹出详情弹窗 |
| 编辑课程 | ✅ 完成 | 详情页点击编辑按钮 |
| 删除课程 | ✅ 完成 | 详情页点击删除按钮 |
1.4 当前已知问题
| 问题 | 状态 | 说明 |
|---|---|---|
| 课程添加无响应 | ❌ 未解决 | 点击添加按钮后弹窗无法正常提交 |
二、上课时间设置功能
2.1 数据模型 (lib/models/school_time.dart)
| 功能 | 状态 | 说明 |
|---|---|---|
| SchoolTime 类定义 | ✅ 完成 | 包含节次、开始/结束时间 |
| 默认时间配置 | ✅ 完成 | getDefaultTimes() 方法 |
2.2 数据库服务
| 功能 | 状态 | 说明 |
|---|---|---|
| school_time 表创建 | ✅ 完成 | 数据库版本升级 |
| 增删改查方法 | ✅ 完成 | getAll/update/reset 方法 |
2.3 设置页面 (lib/pages/school_time_page.dart)
| 功能 | 状态 | 说明 |
|---|---|---|
| 时间列表展示 | ✅ 完成 | 显示所有节次时间 |
| 编辑弹窗 | ✅ 完成 | 点击节次修改时间 |
| 重置功能 | ✅ 完成 | 恢复默认时间配置 |
2.4 入口配置
| 功能 | 状态 | 说明 |
|---|---|---|
| 个人页入口 | ✅ 完成 | 功能菜单中添加 |
三、临时课程安排功能
3.1 课程模型扩展
| 功能 | 状态 | 说明 |
|---|---|---|
| CourseType 枚举 | ✅ 完成 | regular / temporary |
| type 字段 | ✅ 完成 | 课程类型标识 |
| tempReason 字段 | ✅ 完成 | 临时课程原因 |
3.2 数据库适配
| 功能 | 状态 | 说明 |
|---|---|---|
| 新字段添加 | ✅ 完成 | type、tempReason |
| toJson/fromJson | ✅ 完成 | 字段序列化 |
3.3 添加课程弹窗增强
| 功能 | 状态 | 说明 |
|---|---|---|
| 课程类型开关 | ✅ 完成 | SwitchListTile |
| 原因下拉选择器 | ✅ 完成 | DropdownButtonFormField |
| 表单验证 | ✅ 完成 | 临时课程必须选原因 |
| 提交回调 | ❌ 未解决 | onSaved 可能导致添加失败 |
3.4 课程卡片增强
| 功能 | 状态 | 说明 |
|---|---|---|
| 临时课程标签 | ✅ 完成 | 橙色标签显示原因 |
四、功能完成度统计
| 功能模块 | 完成度 | 说明 |
|---|---|---|
| 周课表网格布局 | 100% | 视图正常显示 |
| 周课表交互(编辑/删除) | 100% | 可正常操作 |
| 周课表添加 | 0% | 添加无响应 |
| 上课时间设置 | 100% | 正常使用 |
| 临时课程模型 | 100% | 数据层完成 |
| 临时课程UI(添加弹窗) | 100% | 界面完成 |
| 临时课程提交 | 0% | 提交无响应 |
| 临时课程标签显示 | 100% | 正常显示 |
五、待解决问题
| 问题 | 优先级 | 状态 |
|---|---|---|
| 添加课程弹窗提交无响应 | 高 | 调试中 |
| 添加作业弹窗提交无响应 | 高 | 调试中 |
| DropdownButtonFormField onSaved 回调 | 高 | 需验证 |
| Navigator.pop 返回值传递 | 高 | 需验证 |
六、下一步计划
- 调试添加弹窗提交逻辑,定位
_submit方法执行情况 - 验证
Navigator.pop(context, course)返回值是否正常传递 - 检查
showDialog的await接收逻辑 - 添加调试日志定位问题
七、当前项目状态
| 模块 | 状态 |
|---|---|
| 周课表视图 | 视图正常,添加功能待修复 |
| 上课时间设置 | ✅ 正常 |
| 临时课程 | 模型完成,提交待修复 |
本日总结:周课表视图、上课时间设置、临时课程功能的主体代码已完成,但添加课程/作业的弹窗提交功能存在 Bug,需要进一步调试修复。
现在真的变成封面图的状态了
更多推荐

所有评论(0)