Pull Request已成功合入, 合并人@openharmony_ci
(感谢 mazheng 的贡献)感谢提交 Pull Requests !此PR未通过DCO校验。
校验失败可能原因:
1. 未签署“DCO协议”(开发者原创声明协议),在线签署、查看签署状态。
2. Commits 中未包含 Signed-off-by信息,参考FAQ处理。
修复上述问题后,在PR的评论框输入“check dco” ,单击”评论”,系统将再次进行DCO校验。
当前检测到如下Commits 未包含Signed-off-by信息:
Thanks for submitting a pull request. This pull request has not passed the DCO check.
Possible causes:
1. You have not signed the Developer Certificate of Origin (DCO). Sign the DCO and check DCO status.
2. The commits do not contain the Signed-off-by information. To resolve this issue, see FAQs.
After resolving the preceding issues, enter check dco in the comment box of this pull request and click Comment. The system will check DCO status again.
The following commits do not contain the Signed-off-by information:


感谢提交 Pull Requests!
Thanks for submitting a pull request.


代码门禁通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6aa902d364650f998bfdf037/runlist
静态检查:
| # | check type | result | report |
|---|---|---|---|
| 1 | codeCheck | pass | >>> |
编译测试:
| # | Device | build result | package |
|---|---|---|---|
| 1 | rntpc_br_rnoh0.82 | success | >>> |


修改点
1. JS 侧:轨道图片属性真正下发
src/Slider.tsx:新增resolveImageSource(),对trackImage/minimumTrackImage/maximumTrackImage统一走Image.resolveAssetSource(web 平台直通),并作为 props 传给原生组件——此前这三个属性在 JS 侧根本没有传下去。2. C++ 侧:打通三个轨道图片属性 + 修正事件重复上报
Props.h/Props.cpp:取消maximumTrackImage、minimumTrackImage、trackImage三个成员及其convertRawProp调用的注释,使其参与 props 解析。SliderJSIBinder.h:补充三个属性的 JSI 声明("object")。SliderNapiBinder.h:把三个ImageSource::uri通过addProperty下发到 ArkTS 侧。SliderEventEmiRequestHandler.h:VALUE_CHANGE分支删除eventEmitter->onChange(event1),只保留onRNCSliderValueChange。3. ArkTS 侧:
SliderDescriptorWrapper.etsresolveImageResource(uri),统一处理asset://、file://assets/src/assets/、裸文件名三种 uri 形态。trackImageSource/minimumTrackImageSource/maximumTrackImageSource三个 getter,与source(thumbImage)复用同一套解析。source返回类型由Resource放宽为Resource | undefined;BlockStyle改为先取this.source,有值才返回IMAGE类型。4. ArkTS 侧:
Slider.etsbuild()拆为两条渲染路径:未设置任何轨道图时保持原有单Slider结构;设置了轨道图时改用Stack分层渲染——整轨底图(trackImage)+ 按getFillRatio()裁切宽/高的minimumTrackImage/maximumTrackImage+ 轨道与已选中色置为Color.Transparent的原生Slider。TRACK_IMAGE_THICKNESS = 6常量与getFillRatio()/ratioToPercent()/hasAnyTrackImage()辅助方法。lowerLimit/upperLimit,并对当前值重新 clamp;取值判断改为this.descriptor.rawProps.value !== undefined。5. 工程化与资料
package.json5.1.3-beta.1→5.1.3-beta.2。CHANGELOG.md新增v5.1.3-beta.2条目;README.md/README_en.md补充轨道图片说明。根因分析
①
trackImage系列属性完全无效整条链路断开:
src/Slider.tsx的 render 里只处理了thumbImage,三个 trackImage 属性从未出现在传给原生组件的 props 中。Props.h/Props.cpp中三个字段连同convertRawProp一起被注释掉,C++ 侧没有这三个成员。SliderJSIBinder.h/SliderNapiBinder.h没有声明和下发,ArkTS 侧SliderProps也没有对应字段。Slider组件本身不提供轨道图片能力(只有trackColor/selectedColor/blockStyle),即便属性传到位也无法直接映射,必须自己分层绘制。②
onValueChange一次变化回调两次SliderEventEmiRequestHandler.h的VALUE_CHANGE分支同时发出onChange和onRNCSliderValueChange两个事件,而 JS 侧把这两个事件都绑定到了同一个onValueChange处理函数上,导致用户回调被重复触发。③
lowerLimit/upperLimit在 props 更新后不刷新lowerLimit/upperLimit只在aboutToAppear()里赋值一次,descriptor 变更回调里却拿它们去 clamp 新值。JS 侧更新后 native 仍按旧边界裁剪。另外
this.descriptor.rawProps.value ? value : this.SliderValue用真值判断:value为0(合法且常见的滑块值)时为 falsy,会被当成「未传 value」而丢弃这次更新。方案说明
ArkUI
Slider没有轨道图片能力,只能自绘。选择「分层 Stack + 透明原生轨道」而不是完全自绘滑块,是为了保留原生的手势、无障碍与slideRange行为,只替换视觉层。未设置轨道图时完全走原有代码路径,保证默认外观与既有行为零变化。三层图片各自包一层带
alignContent的独立Stack(而不是用 offset/padding 定位),是为了让 horizontal / vertical / reverse 四种组合下的对齐方向都由Alignment表达,避免手算偏移量在反向场景下算错。ImageFit.Fill为整图拉伸,不实现 iOS 的 cap-inset 边缘/中心像素拉伸——圆角和装饰性边框会变形。这一差异已在 README 中显式说明,未做隐式行为对齐。测试情况
手动验证
trackImage的两个 Slider,视觉差异符合预期;minimumTrackImage/maximumTrackImage随取值变化分层裁切正确。onValueChange只回调一次(此前两次)。lowerLimit/upperLimit后 clamp 按新边界生效;value=0不再被当作「未传值」丢弃。src/Slider.tsx、src/index.ts、src/RNCSliderNativeComponent.ts通过 esbuild 解析校验。资料修改
README.md/README_en.md已说明本实现使用ImageFit.Fill整图拉伸、不实现 iOS cap-inset 拉伸,并把三个 trackImage 属性的鸿蒙支持列由「否」改为「是」。package.json已由5.1.3-beta.1改为5.1.3-beta.2,CHANGELOG.md已新增条目;README 顶部版本表未刷新(本次为 pre-release,计划正式 release 时统一更新)。依赖关系变更
trackImage/minimumTrackImage/maximumTrackImage三个属性开始生效,属增量能力,无 breaking change。onValueChange由一次变化回调两次收敛为一次——属于向上游语义对齐的行为修正,依赖「回调两次」的业务代码需要留意。harmony/slider.har已同步更新,其内嵌的 ArkTS 与 C++ 源码均与本次改动保持一致(含事件去重与 limit 刷新修复)。⚠️ 注意:该 har 整体仍是较早版本的构建产物——内含的 C++ 源码、
oh-package.json5版本号、以及 ArkTS 源码的格式化风格均落后于仓库源码。合入前建议在 DevEco 中完整重新构建并提交,否则本次 C++ 侧改动不会随 har 交付。Checklist