Skip to content

feat: 主课表页面体育课程支持地点查看 - #180

Open
clever-max wants to merge 1 commit into
BenderBlog:mainfrom
clever-max:codex/class-table-sports-sync
Open

feat: 主课表页面体育课程支持地点查看#180
clever-max wants to merge 1 commit into
BenderBlog:mainfrom
clever-max:codex/class-table-sports-sync

Conversation

@clever-max

Copy link
Copy Markdown
Contributor

描述

改进点

  • 主课表页中,体育课条目(教务系统里教室为空)现在会显示体育系统中登记的上课地点(如"体育馆"),方便课前确认场地。
  • 体育课程窗口的加载/下拉刷新/错误重试接入统一 SportController,与首页下拉刷新共用同一请求与缓存:不再每次进入页面重复请求、刷新间状态一致。

改动文件

  • lib/controller/sport_controller.dart(新增):体育课程单例 Controller——signal<AsyncState<FetchResult<SportClass>>> 状态壳 + _lastValidClass 缓存 + sportClassesComputedSignal + SingleFlight 防重入的 reloadClass()
  • lib/model/xidian_sport/sport_class_table_sync.dart(新增):纯函数 mergeSportClassLocations()——把体育课程地点按语义键回填进课表 TimeArrangement.classroom
  • lib/controller/classtable_controller.dartclassTableComputedSignal 从手写逐字段复制改为调用 mergeSportClassLocations 合并体育地点后输出
  • lib/controller/homepage_controller.dart:首页刷新任务列表注册 SportController.i.reloadClass
  • lib/page/sport/sport_class_window.dart:三处 SportSession().getClass() 直连改为 SportController.i.reloadClass()(首载 / 下拉刷新 / 错误重试)
  • test/repository/xidian_sport/sport_class_table_sync_test.dart(新增):合并函数的纯逻辑单测
  • pubspec.yamlhtml 约束 ^0.15.4'>=0.15.5 <0.15.7'

改动点与意图

  • 合并键 =(学期、教师去空白、星期、起止节次)→ 把 SportClassItem.place 填到匹配的课表 TimeArrangement.classroom仅当该项教室为空、学期一致、老师&起始节次&周几唯一匹配时才回填 → 避免同教师多场地时错误归属,且不覆盖教务已给的地点。
  • 输出全新的 ClassTableData 并拷贝 timeArrangement(仅改 classroom)→ 合并不污染缓存中的原课表对象(测试断言 source 保持 classroom 为空)。
  • 体育模块原本"无 controller、页面直连 SportSession"(项目文档记录的例外模块之一);本次为满足"首页刷新与课表合并都需要体育课程数据",引入最小单例 Controller 统一请求/缓存 → 消除多入口各自请求、状态不一致。
  • classTableComputedSignal 依赖 sportClassesComputedSignal → 体育课程刷新后课表教室自动更新(signals 计算链)。

pubspec.yamlhtml 约束收窄与体育功能无直接关系:为构建兼容而收紧,若确为上游/依赖问题建议另开提交或直接修改,避免与功能改动混在同一 PR。

测试结果

  • flutter analyze:0 error / 0 warning
  • flutter test:+33 全部通过(含新增 sport_class_table_sync_test
  • 实机(三学期体育课均成功匹配)
Screenshot_2026-09-08-00-26-25-628_io github ben Screenshot_2026-09-08-00-26-58-049_io github ben Screenshot_2026-09-08-00-27-22-102_io github ben

Q: 不知道有没有必要在首页刷新状态中增加体育课状态刷新,不过此功能使用频率较低且不知是否会引入UI溢出问题

@BenderBlog

Copy link
Copy Markdown
Owner

1.6.8 再看

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants