Files
FamilyBook_harmonyos/entry
laoyang 559d79b2e2 v79b 端上:修 ForEach 键——改完状态卡片还显示旧状态
自查发现的隐患,**编译通过、静态断言全绿、节点也都在**,只是内容陈旧:

任务行是 `@Builder taskRow(t: FbTaskItem, …)` / `taskCard(t)` —— 入参按值传递、
不参与状态观察(本仓库文件头第 A 条反模式)。而 `ForEach` 的生成键只有
`'htk_' + t.id` ⇒ 改了状态 → 重拉列表 → `this.tasks` 换成新对象,但**键没变**
⇒ ArkUI 按 key 复用旧节点、不重跑生成器 ⇒ 卡片仍显示旧状态。

用户会看到:「面板里改成已完成了,关掉面板那张卡还是待办。」

修法:新增 `model/Types.taskKey(t)`,键里带**所有会被画到行上的字段**
(status / boardId / dueAt / overdue / childDone+childTotal / title),
首页与任务页两处 ForEach 都改用它;面板里子任务行的键也补上 `k.status`。

⚠️ 代价是状态一变这一行会重建(丢的是这一行的局部动画,不是滚动位置)。
   这是刻意的取舍:**宁可重画,也不要不刷新**。

新增守卫 ⑯ 组 10 条(计数/关系型:
「键生成器必须调 taskKey」「taskKey 必须含这 6 个字段」「子任务键要带 status」),
并补 5 条反向验证注入(退回只拼 id / 漏 status / 漏 boardId / 子任务键缺 status)。

守卫 1064/0 · 反向 220/0 · 编译 BUILD SUCCESSFUL。
2026-10-22 17:33:32 +08:00
..