跨端: 按压反馈内联进基础玻璃卡 —— 18 个站点从 1 个变全部(基础组件自带动画)
用户问过两次:
·「各个组件带响应点击、滑动的动画了吗」
·「基础组件包含动画」
之前按压反馈是**单独一个 modifier**,要靠调用点自己叠:
CompositeModifier.of([GlassCardModifier.of(x), PressFeedbackModifier.of()])
实测全仓 18 个玻璃卡站点里**只有 1 个**记得叠。
★ 这不是"写的人不小心"—— **两个东西要一起用时,就该是一个东西**。
把按压并进基础卡之后,18 个站点**自动全都有**按压反馈,
且**不需要在每个调用点改一个字**。这才是"基础组件包含动画"的形状。
实现:
· `GlassCardModifier` 加 `pressable`(**默认 true**),在自己的
`applyNormalAttribute` 末尾内联调用反馈 —— 不走 CompositeModifier,
那是给"调用点自己有好几个 modifier 要叠"用的,这里是基础组件内部要知道的事。
· `PressFeedbackModifier.attach(instance, color?)` 抽成静态方法,
两边共用同一段 `onTouch` 逻辑(`instance` 本来就是 `CommonAttribute`,
类型一致,不需要包一层)。
· 顺带把原先唯一"叠对了"的那处(`MainPage` 会话组头卡)简化掉 ——
它现在是全场唯一的例外写法,反而容易让人以为"要叠才生效"。
★ 为什么默认 **true** 而不是"想按才开":WebUI 那一侧是**全局**的 ——
`index.css:1169` 对 `button, a, input, textarea, select, [role='button']`
统一给了 `transition`。"可点就有点击反馈"在两端都该是默认。
静态信息卡可以传 false —— 但不会有人漏,因为不可点的卡本来就没有按压语义,
而**漏掉真正可点的卡**才是原来那个问题(18 分之 17 漏)。
设备验证(模拟器):在组头卡上长按,hilog 抓到
PressFB: touch type=0 ← Down
PressFB: touch type=1 ← Up
成对到达。验证用的临时 hilog 已撤(不是留在代码里)。
★ 记一个**没验成**的取证方法,免得下次再花时间:
想靠"按住时截图看底色变了"来取证,试了三轮都不行 ——
`snapshot_display` 的往返延迟(~250ms + 传输)比一次按压的窗口长,
抓到的永远是松开后的画面。**延时不敏感的取证是 hilog**:
回调有没有触发是个**事件事实**,不需要抢时间窗。