Files
FamilyBook_harmonyos/entry
laoyang f0d0ab9a05 fix(card): 观影 4x4/6x4 海报墙「只有 6 张图」修复 #2
用户原话:「观影4x4和4x6,只有六张图,划到第七张,就没图片了」

病根:两个上限各写各的
  · CARD_IMG_MAX = 6      (配图数)
  · rows.length < 30      (列表长度)
⇒ 前 6 格有海报,第 7 格起 img === '',posterCell 走 else 画淡紫占位块。
渲染没错、数据也没缺(线上 movie_details 221 条全有 poster_key,去重 205 张),
纯粹是「配图数 < 格子数」的结构性问题。

修法(不是把 6 改成 20 就完事,而是让格子数由图数决定):
  · CARD_IMG_MAX 6 → 20,依据华为 Form Kit FAQ:API 20+ 上限 20 张 / 10MB,
    本机 const.ohos.apiversion = 26 走这一档;
    内存按解码后算 240×360×4×20 = 6.59MB < 10MB,留 3.4MB 余量。
  · 拆出 CARD_ROW_MAX = 30(命名常量),专给不画图的 2x2/2x4 纯文本行。
  · 新增 list:只保留 img !== '' 的行,长度天然 ≤ CARD_IMG_MAX
    ⇒ 格子数与图数在结构上永远相等,某张 404 也不会冒空格子。
  · fbAttachPosters 签名 (recent, list) → (rows),两个数组各写一遍循环太容易只改一处。
  · 新增 fbCardImagePaths 并发取图(MAX_PARALLEL = 4):20 张串行实测 10~17s,
    卡片刷新窗口撑不住。MAX_FILES 24 必须 ≥ CARD_IMG_MAX,否则后下的挤掉先下的。

验证:静态守卫 1317/0;反向验证 15/0(7 条注入各自恰好命中目标断言)。
其中注入 A 抓出原先一条假绿断言:写的是「CARD_IMG_MAX >= 4」,
而 bug 原值正好是 6,6 >= 4 恒真 ⇒ 等于什么都没守。已改成「> 6」。
2026-10-27 23:06:24 +08:00
..