鸿蒙 ArkTS 实战:充电宝记录的状态建模、核心算法与交互实现
鸿蒙 ArkTS 实战:充电宝记录的状态建模、核心算法与交互实现
前言
充电宝记录是一款面向具体生活场景的补电量记录工具,主要用于按设备容量和起止电量估算单次输入电量,并累计充电次数。
项目使用 ArkTS 编写业务状态和函数,使用 ArkUI 组织页面结构,核心数据包括 capacity、startLevel、endLevel、sessions、result。
与只展示固定文字的页面不同,这个项目围绕百分比差、容量换算、非负保护和累计次数建立了完整的数据闭环。
默认状态为容量 10000mAh、开始 20%、结束 80%、记录 0 次,打开页面后即可观察本次估算输入电量与累计记录次数。
本文以真实页面源码为基础,解释状态从输入控件进入业务函数,再转化为结果区域的全过程。
图 1:DevEco Studio 提供 ArkTS 编辑、构建、预览与调试能力,本文代码可直接在该环境中运行。
小型工具页面的技术价值不取决于组件数量,而取决于输入、规则、边界和反馈能否形成可复算的闭环。
当每个结果都能追溯到明确状态时,界面行为会更稳定,临界条件也更容易验证。
本项目最值得关注的实现主线是 百分比差、容量换算、非负保护和累计次数,它直接决定页面结论是否符合业务直觉。
文章只讨论当前源码已经实现的本地能力,不虚构网络接口、数据库、后台服务或跨设备同步。
一、补电记录的业务口径
1.1 数据与结构
充电宝记录在这一部分围绕补电记录的业务口径展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
容量与百分比差共同决定本次补电量。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
1.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
1.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
1.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
| 补电记录的业务口径维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | capacity、startLevel、endLevel、sessions、result | 保存当前业务数据 |
| 规则 | 电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入 | 生成本次估算输入电量与累计记录次数 |
| 边界 | 结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示 | 防止无效状态 |
| 反馈 | 本次估算输入电量与累计记录次数 | 形成可读结论 |
二、设备容量区间
2.1 数据与结构
充电宝记录在这一部分围绕设备容量区间展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
2.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
2.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
2.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
三、起止电量百分比
3.1 数据与结构
充电宝记录在这一部分围绕起止电量百分比展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
sessions 每次记录自增,结果文案同步包含本次值与累计值。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
3.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
3.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
3.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
- 读取当前状态,确认输入处于控件允许范围。
- 调用成员函数,计算中间值或更新目标记录。
- 执行阈值判断、数组更新、取整或非负保护。
- 由 ArkUI 重新读取状态并刷新结果区域。
四、非负增幅计算
4.1 数据与结构
充电宝记录在这一部分围绕非负增幅计算展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
容量与百分比差共同决定本次补电量。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
4.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
4.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
4.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
| 非负增幅计算维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | capacity、startLevel、endLevel、sessions、result | 保存当前业务数据 |
| 规则 | 电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入 | 生成本次估算输入电量与累计记录次数 |
| 边界 | 结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示 | 防止无效状态 |
| 反馈 | 本次估算输入电量与累计记录次数 | 形成可读结论 |
五、mAh 换算公式
5.1 数据与结构
充电宝记录在这一部分围绕mAh 换算公式展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
5.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
5.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
5.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
六、记录次数累加
6.1 数据与结构
充电宝记录在这一部分围绕记录次数累加展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
sessions 每次记录自增,结果文案同步包含本次值与累计值。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
6.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
6.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
6.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
- 充电宝记录只保存会被用户操作改变或需要持续展示的状态。
- record 及相关表达式负责当前项目的计算和组合更新。
- 本次估算输入电量与累计记录次数把内部数值和状态转化为当前场景可理解的信息。
- 充电宝记录使用颜色强化状态,但最终结论仍由文字和数字共同表达。
七、清除次数的状态语义
7.1 数据与结构
充电宝记录在这一部分围绕清除次数的状态语义展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
容量与百分比差共同决定本次补电量。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
7.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
7.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
7.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
八、不同电量区间演算
8.1 数据与结构
充电宝记录在这一部分围绕不同电量区间演算展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
8.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
8.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
8.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
| 不同电量区间演算维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | capacity、startLevel、endLevel、sessions、result | 保存当前业务数据 |
| 规则 | 电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入 | 生成本次估算输入电量与累计记录次数 |
| 边界 | 结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示 | 防止无效状态 |
| 反馈 | 本次估算输入电量与累计记录次数 | 形成可读结论 |
九、ArkTS 页面入口与组件职责
9.1 数据与结构
充电宝记录在这一部分围绕ArkTS 页面入口与组件职责展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
sessions 每次记录自增,结果文案同步包含本次值与累计值。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
9.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
9.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
9.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
- 读取当前状态,确认输入处于控件允许范围。
- 调用成员函数,计算中间值或更新目标记录。
- 执行阈值判断、数组更新、取整或非负保护。
- 由 ArkUI 重新读取状态并刷新结果区域。
十、@State 响应式状态链路
10.1 数据与结构
充电宝记录在这一部分围绕@State 响应式状态链路展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
容量与百分比差共同决定本次补电量。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
10.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
10.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
10.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
十一、业务函数与界面构建分离
11.1 数据与结构
充电宝记录在这一部分围绕业务函数与界面构建分离展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
11.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
11.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
11.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
- 充电宝记录只保存会被用户操作改变或需要持续展示的状态。
- record 及相关表达式负责当前项目的计算和组合更新。
- 本次估算输入电量与累计记录次数把内部数值和状态转化为当前场景可理解的信息。
- 充电宝记录使用颜色强化状态,但最终结论仍由文字和数字共同表达。
十二、ArkUI 控件的事件回调
12.1 数据与结构
充电宝记录在这一部分围绕ArkUI 控件的事件回调展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
sessions 每次记录自增,结果文案同步包含本次值与累计值。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
12.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
12.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
12.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
| ArkUI 控件的事件回调维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | capacity、startLevel、endLevel、sessions、result | 保存当前业务数据 |
| 规则 | 电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入 | 生成本次估算输入电量与累计记录次数 |
| 边界 | 结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示 | 防止无效状态 |
| 反馈 | 本次估算输入电量与累计记录次数 | 形成可读结论 |
十三、声明式刷新与结果派生
13.1 数据与结构
充电宝记录在这一部分围绕声明式刷新与结果派生展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
容量与百分比差共同决定本次补电量。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
13.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
13.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
13.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
十四、输入边界和异常值保护
14.1 数据与结构
充电宝记录在这一部分围绕输入边界和异常值保护展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
14.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
14.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
14.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
十五、页面布局与信息层级
15.1 数据与结构
充电宝记录在这一部分围绕页面布局与信息层级展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
sessions 每次记录自增,结果文案同步包含本次值与累计值。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
15.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
15.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
15.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
- 读取当前状态,确认输入处于控件允许范围。
- 调用成员函数,计算中间值或更新目标记录。
- 执行阈值判断、数组更新、取整或非负保护。
- 由 ArkUI 重新读取状态并刷新结果区域。
十六、颜色、文字与状态反馈
16.1 数据与结构
充电宝记录在这一部分围绕颜色、文字与状态反馈展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
容量与百分比差共同决定本次补电量。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
16.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
16.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
16.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
| 颜色、文字与状态反馈维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | capacity、startLevel、endLevel、sessions、result | 保存当前业务数据 |
| 规则 | 电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入 | 生成本次估算输入电量与累计记录次数 |
| 边界 | 结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示 | 防止无效状态 |
| 反馈 | 本次估算输入电量与累计记录次数 | 形成可读结论 |
十七、默认数据的首次运行
17.1 数据与结构
充电宝记录在这一部分围绕默认数据的首次运行展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
17.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
17.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
17.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
十八、连续操作下的状态迁移
18.1 数据与结构
充电宝记录在这一部分围绕连续操作下的状态迁移展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
sessions 每次记录自增,结果文案同步包含本次值与累计值。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
18.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
18.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
18.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
- 充电宝记录只保存会被用户操作改变或需要持续展示的状态。
- record 及相关表达式负责当前项目的计算和组合更新。
- 本次估算输入电量与累计记录次数把内部数值和状态转化为当前场景可理解的信息。
- 充电宝记录使用颜色强化状态,但最终结论仍由文字和数字共同表达。
十九、关键路径的验证方法
19.1 数据与结构
充电宝记录在这一部分围绕关键路径的验证方法展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
容量与百分比差共同决定本次补电量。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
19.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
19.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
19.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
二十、性能与可维护性分析
20.1 数据与结构
充电宝记录在这一部分围绕性能与可维护性分析展开。源码使用 capacity、startLevel、endLevel、sessions、result 保存页面需要持续观察的业务数据。
Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 这项设计与“按设备容量和起止电量估算单次输入电量,并累计充电次数”的操作顺序一致。
20.2 规则与原因
核心规则可以概括为:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
充电宝记录把关键判断集中在 record 及相关成员逻辑中,build 只读取结果并声明控件。
20.3 交互与刷新
用户操作充电宝记录的输入控件后,回调写回 capacity、startLevel、endLevel、sessions、result 中对应字段,结果区域随状态刷新。
当前操作最终反馈为本次估算输入电量与累计记录次数,每次交互都能在界面中找到对应结果。
20.4 边界与结论
这一部分需要遵守的边界是:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
充电宝记录在输入层和业务层共同执行“结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示”,让异常值无法扩散到结果文案。
| 性能与可维护性分析维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | capacity、startLevel、endLevel、sessions、result | 保存当前业务数据 |
| 规则 | 电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入 | 生成本次估算输入电量与累计记录次数 |
| 边界 | 结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示 | 防止无效状态 |
| 反馈 | 本次估算输入电量与累计记录次数 | 形成可读结论 |
二十一、真实源码分段解读
21.1 源码片段 1
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
@Entry
@Component
struct Index {
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
21.2 源码片段 2
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
@State capacity: number = 10000;
@State startLevel: number = 20;
@State endLevel: number = 80;
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
21.3 源码片段 3
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
@State sessions: number = 0;
@State result: string = '记录一次完整充电过程';
record(): void { let gain: number = Math.max(0, this.endLevel - this.startLevel); let energy: number = Math.round(this.capacity * gain / 100); this.sessions += 1; this.result = '本次输入约 ' + energy + ' mAh,累计 ' + this.sessions + ' 次'; }
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
21.4 源码片段 4
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
build() {
Column() {
Text('充电宝记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%')
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
21.5 源码片段 5
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
Text('记录每次补电量,了解实际使用习惯').fontSize(14).fontColor('#667085').width('100%').margin({ top: 6 })
Row() { Column() { Text('容量').fontSize(13).fontColor('#667085'); Text(this.capacity + ' mAh').fontSize(25).fontWeight(FontWeight.Bold) }.layoutWeight(1); Column() { Text('已记录').fontSize(13).fontColor('#667085'); Text(this.sessions + ' 次').fontSize(25).fontWeight(FontWeight.Bold).fontColor('#157A6E') } }.width('100%').padding(16).margin({ top: 24 }).backgroundColor('#F0FDF9').borderRadius(12)
Text('设备容量').fontSize(16).margin({ top: 24 }).width('100%'); Slider({ value: this.capacity, min: 5000, max: 30000, step: 1000 }).onChange((v: number) => this.capacity = Math.round(v)).width('100%')
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
21.6 源码片段 6
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
Text('开始电量:' + this.startLevel + '%').margin({ top: 18 }).width('100%'); Slider({ value: this.startLevel, min: 0, max: 90, step: 5 }).onChange((v: number) => this.startLevel = Math.round(v)).width('100%')
Text('结束电量:' + this.endLevel + '%').margin({ top: 14 }).width('100%'); Slider({ value: this.endLevel, min: 5, max: 100, step: 5 }).onChange((v: number) => this.endLevel = Math.round(v)).width('100%')
Button('记录本次充电').width('100%').height(48).margin({ top: 22 }).onClick(() => this.record())
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
21.7 源码片段 7
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
Text(this.result).width('100%').textAlign(TextAlign.Center).fontSize(17).padding(18).margin({ top: 16 }).backgroundColor('#ECFDF3').fontColor('#087443').borderRadius(10)
Button('清除记录次数').width('100%').height(40).margin({ top: 12 }).backgroundColor('#EEF2F6').fontColor('#344054').onClick(() => { this.sessions = 0; this.result = '记录已清除'; })
}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
21.8 源码片段 8
下面的 ArkTS 代码直接取自充电宝记录页面,用于对应状态、函数或组件分析。
}
}
该片段参与按设备容量和起止电量估算单次输入电量,并累计充电次数的实现,需要结合前后状态字段和事件回调理解。
二十二、典型运行案例
22.1 默认场景
使用容量 10000mAh、开始 20%、结束 80%、记录 0 次启动页面,核对本次估算输入电量与累计记录次数是否与初始字段一致。
验证时同时观察源状态、record 相关逻辑和结果文案,不能只查看颜色变化。
如果百分比差、容量换算、非负保护和累计次数变化后仍能得到可复算的本次估算输入电量与累计记录次数,就说明该项目的状态链路保持一致。
该场景需要连续执行两次,重点观察capacity、startLevel、endLevel、sessions、result是否出现旧值滞留。
22.2 最小边界
把可调参数移动到最小值,重点验证:结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示。
验证时同时观察源状态、record 相关逻辑和结果文案,不能只查看颜色变化。
如果百分比差、容量换算、非负保护和累计次数变化后仍能得到可复算的本次估算输入电量与累计记录次数,就说明该项目的状态链路保持一致。
该场景需要连续执行两次,重点观察capacity、startLevel、endLevel、sessions、result是否出现旧值滞留。
22.3 临界条件
围绕百分比差、容量换算、非负保护和累计次数测试阈值前、阈值本身和阈值后的输入。
验证时同时观察源状态、record 相关逻辑和结果文案,不能只查看颜色变化。
如果百分比差、容量换算、非负保护和累计次数变化后仍能得到可复算的本次估算输入电量与累计记录次数,就说明该项目的状态链路保持一致。
该场景需要连续执行两次,重点观察capacity、startLevel、endLevel、sessions、result是否出现旧值滞留。
22.4 连续操作
连续执行新增、计算、切换或记录操作,观察状态与结果是否同步。
验证时同时观察源状态、record 相关逻辑和结果文案,不能只查看颜色变化。
如果百分比差、容量换算、非负保护和累计次数变化后仍能得到可复算的本次估算输入电量与累计记录次数,就说明该项目的状态链路保持一致。
该场景需要连续执行两次,重点观察capacity、startLevel、endLevel、sessions、result是否出现旧值滞留。
| 验证维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | capacity、startLevel、endLevel、sessions、result | 保存当前业务数据 |
| 规则 | 电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入 | 生成本次估算输入电量与累计记录次数 |
| 边界 | 结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示 | 防止无效状态 |
| 反馈 | 本次估算输入电量与累计记录次数 | 形成可读结论 |
二十三、实现中的技术取舍
23.1 本地状态
充电宝记录把本地状态作为当前单页实现的重要组成部分。
它服务于按设备容量和起止电量估算单次输入电量,并累计充电次数,并与百分比差、容量换算、非负保护和累计次数共同形成可理解的操作流程。
充电宝记录当前只维护本地页面状态,百分比差、容量换算、非负保护和累计次数均可在一个组件内追踪,职责边界明确。
23.2 具名函数
充电宝记录把具名函数作为当前单页实现的重要组成部分。
它服务于按设备容量和起止电量估算单次输入电量,并累计充电次数,并与百分比差、容量换算、非负保护和累计次数共同形成可理解的操作流程。
充电宝记录当前只维护本地页面状态,百分比差、容量换算、非负保护和累计次数均可在一个组件内追踪,职责边界明确。
23.3 声明式组件
充电宝记录把声明式组件作为当前单页实现的重要组成部分。
它服务于按设备容量和起止电量估算单次输入电量,并累计充电次数,并与百分比差、容量换算、非负保护和累计次数共同形成可理解的操作流程。
充电宝记录当前只维护本地页面状态,百分比差、容量换算、非负保护和累计次数均可在一个组件内追踪,职责边界明确。
23.4 清晰边界
充电宝记录把清晰边界作为当前单页实现的重要组成部分。
它服务于按设备容量和起止电量估算单次输入电量,并累计充电次数,并与百分比差、容量换算、非负保护和累计次数共同形成可理解的操作流程。
充电宝记录当前只维护本地页面状态,百分比差、容量换算、非负保护和累计次数均可在一个组件内追踪,职责边界明确。
二十四、总结
充电宝记录使用鸿蒙 ArkTS 完成了“按设备容量和起止电量估算单次输入电量,并累计充电次数”这一完整功能闭环。
页面由 capacity、startLevel、endLevel、sessions、result 提供状态基础,关键业务围绕 record 及相关表达式展开。
算法或状态更新的核心是:电量增幅为结束百分比减开始百分比的非负值,输入电量等于容量乘增幅百分比并四舍五入。
边界方面,源码明确执行结束电量低于开始电量时 gain 收敛为 0;清除操作只归零次数并更新提示,避免极端输入产生无意义结果。
状态建模 决定数据是否清楚,业务函数 决定规则是否可复算,ArkUI 组件树 决定反馈是否及时。
容量与百分比差共同决定本次补电量。 Math.round 将换算结果转为整型 mAh,符合页面展示粒度。 sessions 每次记录自增,结果文案同步包含本次值与累计值。
相关资源:
更多推荐



所有评论(0)