Files
FamilyBook_harmonyos/entry
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
..