鸿蒙 ArkTS 实战:手电筒电池记录的状态建模、算法与交互实现

前言

手电筒电池记录用于按手电筒名称记录电量和更换次数。
项目通过 ArkTSArkUI@State 管理 name、battery、changes。
核心是 百分比边界、低电量阈值和更换统计,默认数据为露营手电 70%。
页面展示当前电量和累计更换次数。
在这里插入图片描述
图 1:DevEco Studio 中的 ArkTS 开发环境。

页面结果应能从当前状态完整复算。
边界条件必须落到真实代码路径。
名称让记录对应具体设备。
本文只讨论源码已实现能力。

一、业务对象

1.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑业务对象。
名称让记录对应具体设备。

1.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

1.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

1.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

业务对象维度 当前实现 作用
状态 name、battery、changes 保存数据
规则 电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数 生成反馈
边界 百分比边界、低电量阈值和更换统计 保护结果
结果 当前电量和累计更换次数 呈现结论

二、状态字段

2.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑状态字段。
20% 为低电量边界。

2.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

2.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

2.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

三、核心规则

3.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑核心规则。
更换操作恢复满电。

3.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

3.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

3.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

  1. 读取输入。
  2. 执行业务规则。
  3. 处理边界。
  4. 刷新界面。

四、输入控件

4.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑输入控件。
名称让记录对应具体设备。

4.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

4.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

4.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

输入控件维度 当前实现 作用
状态 name、battery、changes 保存数据
规则 电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数 生成反馈
边界 百分比边界、低电量阈值和更换统计 保护结果
结果 当前电量和累计更换次数 呈现结论

五、事件回调

5.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑事件回调。
20% 为低电量边界。

5.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

5.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

5.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

六、边界保护

6.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑边界保护。
更换操作恢复满电。

6.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

6.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

6.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

  • 手电筒电池记录保存真实状态。
  • changes参与核心逻辑。
  • 当前电量和累计更换次数形成反馈。
  • 百分比边界、低电量阈值和更换统计保护输出。

七、状态反馈

7.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑状态反馈。
名称让记录对应具体设备。

7.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

7.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

7.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

八、默认运行

8.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑默认运行。
20% 为低电量边界。

8.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

8.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

8.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

默认运行维度 当前实现 作用
状态 name、battery、changes 保存数据
规则 电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数 生成反馈
边界 百分比边界、低电量阈值和更换统计 保护结果
结果 当前电量和累计更换次数 呈现结论

九、连续操作

9.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑连续操作。
更换操作恢复满电。

9.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

9.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

9.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

  1. 读取输入。
  2. 执行业务规则。
  3. 处理边界。
  4. 刷新界面。

十、数组或数值更新

10.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑数组或数值更新。
名称让记录对应具体设备。

10.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

10.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

10.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

十一、声明式刷新

11.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑声明式刷新。
20% 为低电量边界。

11.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

11.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

11.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

  • 手电筒电池记录保存真实状态。
  • changes参与核心逻辑。
  • 当前电量和累计更换次数形成反馈。
  • 百分比边界、低电量阈值和更换统计保护输出。

十二、布局结构

12.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑布局结构。
更换操作恢复满电。

12.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

12.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

12.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

布局结构维度 当前实现 作用
状态 name、battery、changes 保存数据
规则 电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数 生成反馈
边界 百分比边界、低电量阈值和更换统计 保护结果
结果 当前电量和累计更换次数 呈现结论

十三、颜色语义

13.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑颜色语义。
名称让记录对应具体设备。

13.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

13.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

13.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

十四、异常输入

14.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑异常输入。
20% 为低电量边界。

14.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

14.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

14.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

十五、验证场景

15.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑验证场景。
更换操作恢复满电。

15.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

15.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

15.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

  1. 读取输入。
  2. 执行业务规则。
  3. 处理边界。
  4. 刷新界面。

十六、性能表现

16.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑性能表现。
名称让记录对应具体设备。

16.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

16.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

16.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

性能表现维度 当前实现 作用
状态 name、battery、changes 保存数据
规则 电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数 生成反馈
边界 百分比边界、低电量阈值和更换统计 保护结果
结果 当前电量和累计更换次数 呈现结论

十七、维护方式

17.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑维护方式。
20% 为低电量边界。

17.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

17.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

17.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

十八、代码职责

18.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑代码职责。
更换操作恢复满电。

18.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

18.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

18.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

  • 手电筒电池记录保存真实状态。
  • changes参与核心逻辑。
  • 当前电量和累计更换次数形成反馈。
  • 百分比边界、低电量阈值和更换统计保护输出。

十九、运行结论

19.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑运行结论。
名称让记录对应具体设备。

19.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

19.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

19.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

二十、项目启示

20.1 数据结构

手电筒电池记录使用 name、battery、changes 支撑项目启示。
20% 为低电量边界。

20.2 业务规则

电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数
changes 及相关表达式承担核心行为。

20.3 交互刷新

控件回调更新状态并显示当前电量和累计更换次数。
ArkUI 根据依赖关系刷新。

20.4 边界结论

百分比边界、低电量阈值和更换统计
结果因此保持稳定。

项目启示维度 当前实现 作用
状态 name、battery、changes 保存数据
规则 电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数 生成反馈
边界 百分比边界、低电量阈值和更换统计 保护结果
结果 当前电量和累计更换次数 呈现结论

二十一、真实源码分段

21.1 源码片段 1

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

21.2 源码片段 2

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

21.3 源码片段 3

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

21.4 源码片段 4

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

21.5 源码片段 5

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

21.6 源码片段 6

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

21.7 源码片段 7

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

21.8 源码片段 8

以下代码来自当前项目。

@Entry @Component struct Index { @State name:string='露营手电';@State battery:number=70;@State changes:number=0;build(){Column(){Text('手电筒电池记录').fontSize(27).fontWeight(FontWeight.Bold).width('100%');TextInput({text:this.name,placeholder:'手电筒名称'}).width('100%').onChange((v:string)=>this.name=v).margin({top:20});Text(this.battery+'%').fontSize(50).fontWeight(FontWeight.Bold).fontColor(this.battery<=20?'#B42318':'#175CD3').margin({top:20});Slider({value:this.battery,min:0,max:100,step:5}).onChange((v:number)=>this.battery=Math.round(v)).width('100%');Text(this.battery<=20?'电量低,请更换电池':'电量正常').fontSize(18).fontColor(this.battery<=20?'#B42318':'#087443').margin({top:18});Button('登记更换电池').width('100%').height(48).margin({top:22}).onClick(()=>{this.battery=100;this.changes++});Text('累计更换 '+this.changes+' 次').fontColor('#667085').margin({top:12})}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')} }

该片段参与按手电筒名称记录电量和更换次数。

二十二、运行案例

22.1 默认数据

使用露营手电 70%。
观察 name、battery、changes 与结果文案。
确认当前电量和累计更换次数可复算。

22.2 最小边界

百分比边界、低电量阈值和更换统计
观察 name、battery、changes 与结果文案。
确认当前电量和累计更换次数可复算。

22.3 临界输入

围绕百分比边界、低电量阈值和更换统计验证阈值。
观察 name、battery、changes 与结果文案。
确认当前电量和累计更换次数可复算。

22.4 连续操作

连续执行 changes 相关操作。
观察 name、battery、changes 与结果文案。
确认当前电量和累计更换次数可复算。

验证维度 当前实现 作用
状态 name、battery、changes 保存数据
规则 电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数 生成反馈
边界 百分比边界、低电量阈值和更换统计 保护结果
结果 当前电量和累计更换次数 呈现结论

二十三、总结

手电筒电池记录使用鸿蒙 ArkTS 完成了“按手电筒名称记录电量和更换次数”闭环。
核心规则是:电量小于等于 20% 提示更换,登记更换后恢复 100% 并增加次数。
状态字段为 name、battery、changes。
状态建模业务函数声明式界面 共同保证结果稳定。


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐