laoyang
d2d0a435a3
日程编辑:点「开始」却改了结束时间 laoyang/FamilyBook#34
用户 2026-10-30:「鸿蒙端,日程添加时,选择时间,点上面,
修改的反而是结束时间,这个是 bug。」
根因:openPicker 的参数语义与调用方相反。
· 调用方 dateTimeRow(label, isStart) 传的是 **isStart**
· 被调用方签名却是 openPicker(isEnd),内部直接 pickIsEnd = isEnd
⇒ isStart=true(点开始)→ isEnd=true → 整条链路按"结束"处理。
错得很"自洽"所以一直没被发现:
· 弹层初值读的是结束时间
· 确认后写回的也是结束时间
· 连标题都显示「选择结束时间」
三处一起错,"弹出来的值"和"改完的值"是一致的,看着不像坏。
修法:参数统一成 isStart(与调用方同名同义),内部自己取反。
没在调用处写 openPicker(!isStart) —— 双重否定更容易再错一次。
对照:观影表单 FbMovieNewSheet 用同一个 FbDateTimePicker 组件,
但 pickIsEnd 是显式赋 false/true,没有正反颠倒的空间,不受影响。
验证:
· 编译 BUILD SUCCESSFUL(33 tasks / 17 executed)
· 从真实源码提取三条映射做断言:pickIsEnd=!isStart、
读日期/读时间均在 isStart 时取 fStart* —— 全部通过
· 真值表:点开始→读fStart*→写fStart*→标题「选择开始时间」,
点结束→读fEnd*→写fEnd*→标题「选择结束时间」
· 反向验证:拿修复前的代码跑同一判据,正确转红
(旧版点开始时读写都是 fEnd*),证明判据不是恒真
· 全仓库排查 isStart/isEnd 用法,无同类问题
2026-10-30 15:41:38 +08:00
..
2026-10-30 15:41:38 +08:00
2026-10-11 22:07:48 +08:00
2026-10-11 22:07:48 +08:00
2026-10-11 22:07:48 +08:00
2026-10-11 22:07:48 +08:00