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 |
|
laoyang
|
b84ea06b73
|
v95 服务卡片四项:日程卡「今」按钮放大、观影/任务 2x4 列表可滑动、观影 4x4/6x4 补列间距且 6x4 改两列
#1
用户提四项(2026-10-26):
「日程的右上角那个今天的今,特别不好点,一不小心就到日程里面去了……
是不是可以把按钮弄的大一点。」
「观影的卡片,2x4,右侧观影的列表,不能上下滑动,第三个被截断,很难看,
如果显示多个,就要能滑动,如果不能滑动,就显示两个。」
「任务的 2x4 卡片,也是一样的。」
「观影的 4x4 卡片,和 4x6 卡片,两列图片挤在一起,中间没有空隙,应该缩小一点,
这个大小,我感觉应该根据屏幕的大小来。4x6,宽度都是一样的,为啥要弄成三列?」
① 日程卡「今」按钮 22x22 → 32x32
病根:22 的圆比最小建议点击区小一半,手指偏一点就落到卡片本体的
`.onClick(openApp)` 上 ⇒ 「想回今天」变成「进了日程详情」。
面积 484 → 1024(2.1 倍);同一份 sideBtn() 里的「+」一并放大,
翻页键 ‹ › 本来 32,现在四个按钮手感一致。
为什么是 32 不是 40:4x4 卡高度紧,顶栏与内容区竖向堆叠
(内容区 layoutWeight(1)),顶栏长高多少内容区就少多少。
必须改 width/height 本身 —— 卡片里这是 Button,可点区就是自己的宽高。
②③ 观影/任务 2x4 右半 Column → List(可滚动)
病根不在条数而在容器:Column 根本不滚动 + 硬截 3 条,
3x(38+10=48) + 2x6 = 156vp 而可用仅 ≈130vp ⇒ 第三条被压扁/裁掉。
条数上限 3 → MR_2X4_MAX=12 / TK_2X4_MAX=30;滚动条 BarState.Auto
(条目少时不露空滚动条)。数据侧 FbCardMediaData 两处 `rows.length < 4`
同步放到 30,否则卡上拿到的还是 4 条,改了容器也滑不出东西。
④ 观影 4x4 / 6x4 补列间距 + 6x4 三列改两列
病根:`List({ space: 8 })` 的 space 在 lanes 多列模式下只管行间距,
列与列之间不会自动留缝;海报格 .width('100%') + .aspectRatio(0.68)
又贴着 lane 边排 ⇒ 两列严丝合缝贴死。
改法:.lanes(2) → .lanes(2, 8),第二个位置参数才是列间距 gutter。
⚠️ gutter 是位置参数(SDK list.d.ts: lanes(value, gutter?: Dimension),
Dimension = PX|VP|FP|LPX|Percentage|Resource)⇒ 传数字,
写成 { gutter: 8 } 是类型错误(中途踩到,编译期才炸)。
6x4 同时从 .lanes(3) 改成两列,与 4x4 一致;文件头那句
「这块卡更宽、一排放三张」已过时,已注明别再照着它改回去。
同批带上 v92 未提交的观影海报墙实现(此前只在工作树里,从未提交过):
- 新增 data/FbCardImages.ets(下载 + desiredSize 缩图 + fd 管理)
- FbCardMediaData / FbFormAbility / FbCardForms 里的 formImages 管道
- string.json 卡片名带尺寸(「家书 · 日程 4×4」/「家书 · 观影 4×4」)
⚠️ FbCardImages.ets 已被 FbCardMediaData import,不一起提交就编译不过。
验证:
- 静态守卫 _fb_arkts_guard.js:1303 通过 / 0 失败
(新增 groupV95() 共 28 条,钉住按钮尺寸、List 容器、条数上限、
两列 + gutter>0、且不许写成 { gutter: N } 对象)
- 反向验证 _fb_v59d_falsify.py:289 通过 / 0 失败
(新增 9 条注入,逐条证明上述断言真的会红)
- 真编译 hvigorw assembleHap:BUILD SUCCESSFUL,HAP 产物已生成
⚠️ 真机验收未做:hdc list targets 为空(设备未连/未解锁)。
这四项全是观感与手感,静态断言证明不了「点得着、滑得动、看着舒服」,
待设备连上后补真机探针(重点:真的点「今」、真的滑列表、量两列实际间距)。
|
2026-10-26 07:28:06 +08:00 |
|