鸿蒙 ArkTS 实战:家用冰袋库存的状态建模、核心算法与交互实现
鸿蒙 ArkTS 实战:家用冰袋库存的状态建模、核心算法与交互实现
前言
家用冰袋库存是一款冷冻与借出双状态工具,用于记录冰袋是否冷冻、是否借出以及当前可用数量。
项目以 ArkTS 表达状态和规则,以 ArkUI 构建界面,主要状态包括 name、packs。
页面围绕 双布尔状态、可用条件、对象数组和新增默认值 形成输入、计算与反馈闭环。
默认场景为大号冰袋已冷冻可用,便携冰袋待冷冻,运行后可以观察可用数量、待冷冻、可使用或已借出状态。
本文依据真实 Index.ets 分析字段、函数、控件和边界。
图 1:DevEco Studio 提供 ArkTS 编辑、构建、预览与调试能力。
页面结果必须能够从当前状态和业务规则中完整复算。
临界条件应进入真实代码路径,并在连续操作后保持稳定。
IcePack 同时保存 frozen 与 borrowed。 这是理解家用冰袋库存的起点。
文章只讨论当前源码已实现的本地能力。
一、冰袋双状态模型
1.1 数据与结构
家用冰袋库存围绕冰袋双状态模型组织数据,name、packs承担输入、过程或结果状态。
IcePack 同时保存 frozen 与 borrowed。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
1.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
1.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
1.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
| 冰袋双状态模型维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | name、packs | 保存业务数据 |
| 规则 | 可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组 | 生成可用数量、待冷冻、可使用或已借出状态 |
| 边界 | 空名称不能新增;新冰袋默认未冷冻且未借出 | 阻止无效状态 |
| 反馈 | 可用数量、待冷冻、可使用或已借出状态 | 形成可读结论 |
二、新增记录默认值
2.1 数据与结构
家用冰袋库存围绕新增记录默认值组织数据,name、packs承担输入、过程或结果状态。
借出状态在显示优先级上高于冷冻状态。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
2.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
2.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
2.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
三、冷冻状态切换
3.1 数据与结构
家用冰袋库存围绕冷冻状态切换组织数据,name、packs承担输入、过程或结果状态。
可用统计要求两个布尔条件同时成立。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
3.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
3.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
3.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
- 读取输入和模式状态。
- 调用成员函数完成计算或更新。
- 执行取整、范围保护或数组复制。
- 由 ArkUI 使用新状态刷新结果。
四、借出归还切换
4.1 数据与结构
家用冰袋库存围绕借出归还切换组织数据,name、packs承担输入、过程或结果状态。
IcePack 同时保存 frozen 与 borrowed。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
4.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
4.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
4.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
| 借出归还切换维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | name、packs | 保存业务数据 |
| 规则 | 可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组 | 生成可用数量、待冷冻、可使用或已借出状态 |
| 边界 | 空名称不能新增;新冰袋默认未冷冻且未借出 | 阻止无效状态 |
| 反馈 | 可用数量、待冷冻、可使用或已借出状态 | 形成可读结论 |
五、可用条件判断
5.1 数据与结构
家用冰袋库存围绕可用条件判断组织数据,name、packs承担输入、过程或结果状态。
借出状态在显示优先级上高于冷冻状态。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
5.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
5.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
5.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
六、状态显示优先级
6.1 数据与结构
家用冰袋库存围绕状态显示优先级组织数据,name、packs承担输入、过程或结果状态。
可用统计要求两个布尔条件同时成立。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
6.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
6.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
6.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
- 家用冰袋库存只保存持续观察的数据。
- toggleFrozen 及相关函数承担核心行为。
- 可用数量、待冷冻、可使用或已借出状态把内部状态转化为反馈。
- 双布尔状态、可用条件、对象数组和新增默认值保证输出稳定。
七、数组复制刷新
7.1 数据与结构
家用冰袋库存围绕数组复制刷新组织数据,name、packs承担输入、过程或结果状态。
IcePack 同时保存 frozen 与 borrowed。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
7.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
7.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
7.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
八、双状态组合案例
8.1 数据与结构
家用冰袋库存围绕双状态组合案例组织数据,name、packs承担输入、过程或结果状态。
借出状态在显示优先级上高于冷冻状态。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
8.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
8.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
8.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
| 双状态组合案例维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | name、packs | 保存业务数据 |
| 规则 | 可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组 | 生成可用数量、待冷冻、可使用或已借出状态 |
| 边界 | 空名称不能新增;新冰袋默认未冷冻且未借出 | 阻止无效状态 |
| 反馈 | 可用数量、待冷冻、可使用或已借出状态 | 形成可读结论 |
九、ArkTS 页面入口与组件职责
9.1 数据与结构
家用冰袋库存围绕ArkTS 页面入口与组件职责组织数据,name、packs承担输入、过程或结果状态。
可用统计要求两个布尔条件同时成立。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
9.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
9.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
9.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
- 读取输入和模式状态。
- 调用成员函数完成计算或更新。
- 执行取整、范围保护或数组复制。
- 由 ArkUI 使用新状态刷新结果。
十、@State 响应式状态链路
10.1 数据与结构
家用冰袋库存围绕@State 响应式状态链路组织数据,name、packs承担输入、过程或结果状态。
IcePack 同时保存 frozen 与 borrowed。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
10.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
10.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
10.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
十一、业务函数与界面构建分离
11.1 数据与结构
家用冰袋库存围绕业务函数与界面构建分离组织数据,name、packs承担输入、过程或结果状态。
借出状态在显示优先级上高于冷冻状态。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
11.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
11.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
11.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
- 家用冰袋库存只保存持续观察的数据。
- toggleFrozen 及相关函数承担核心行为。
- 可用数量、待冷冻、可使用或已借出状态把内部状态转化为反馈。
- 双布尔状态、可用条件、对象数组和新增默认值保证输出稳定。
十二、ArkUI 控件事件回调
12.1 数据与结构
家用冰袋库存围绕ArkUI 控件事件回调组织数据,name、packs承担输入、过程或结果状态。
可用统计要求两个布尔条件同时成立。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
12.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
12.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
12.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
| ArkUI 控件事件回调维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | name、packs | 保存业务数据 |
| 规则 | 可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组 | 生成可用数量、待冷冻、可使用或已借出状态 |
| 边界 | 空名称不能新增;新冰袋默认未冷冻且未借出 | 阻止无效状态 |
| 反馈 | 可用数量、待冷冻、可使用或已借出状态 | 形成可读结论 |
十三、声明式刷新与结果派生
13.1 数据与结构
家用冰袋库存围绕声明式刷新与结果派生组织数据,name、packs承担输入、过程或结果状态。
IcePack 同时保存 frozen 与 borrowed。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
13.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
13.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
13.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
十四、输入边界和异常保护
14.1 数据与结构
家用冰袋库存围绕输入边界和异常保护组织数据,name、packs承担输入、过程或结果状态。
借出状态在显示优先级上高于冷冻状态。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
14.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
14.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
14.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
十五、页面布局与信息层级
15.1 数据与结构
家用冰袋库存围绕页面布局与信息层级组织数据,name、packs承担输入、过程或结果状态。
可用统计要求两个布尔条件同时成立。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
15.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
15.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
15.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
- 读取输入和模式状态。
- 调用成员函数完成计算或更新。
- 执行取整、范围保护或数组复制。
- 由 ArkUI 使用新状态刷新结果。
十六、颜色文字与状态反馈
16.1 数据与结构
家用冰袋库存围绕颜色文字与状态反馈组织数据,name、packs承担输入、过程或结果状态。
IcePack 同时保存 frozen 与 borrowed。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
16.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
16.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
16.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
| 颜色文字与状态反馈维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | name、packs | 保存业务数据 |
| 规则 | 可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组 | 生成可用数量、待冷冻、可使用或已借出状态 |
| 边界 | 空名称不能新增;新冰袋默认未冷冻且未借出 | 阻止无效状态 |
| 反馈 | 可用数量、待冷冻、可使用或已借出状态 | 形成可读结论 |
十七、默认数据首次运行
17.1 数据与结构
家用冰袋库存围绕默认数据首次运行组织数据,name、packs承担输入、过程或结果状态。
借出状态在显示优先级上高于冷冻状态。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
17.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
17.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
17.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
十八、连续操作状态迁移
18.1 数据与结构
家用冰袋库存围绕连续操作状态迁移组织数据,name、packs承担输入、过程或结果状态。
可用统计要求两个布尔条件同时成立。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
18.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
18.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
18.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
- 家用冰袋库存只保存持续观察的数据。
- toggleFrozen 及相关函数承担核心行为。
- 可用数量、待冷冻、可使用或已借出状态把内部状态转化为反馈。
- 双布尔状态、可用条件、对象数组和新增默认值保证输出稳定。
十九、关键路径验证方法
19.1 数据与结构
家用冰袋库存围绕关键路径验证方法组织数据,name、packs承担输入、过程或结果状态。
IcePack 同时保存 frozen 与 borrowed。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
19.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
19.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
19.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
二十、性能与可维护性分析
20.1 数据与结构
家用冰袋库存围绕性能与可维护性分析组织数据,name、packs承担输入、过程或结果状态。
借出状态在显示优先级上高于冷冻状态。 该结构对应“记录冰袋是否冷冻、是否借出以及当前可用数量”的操作顺序。
20.2 规则与原因
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
toggleFrozen 及相关成员函数集中业务行为,build 读取结果并声明组件。
20.3 交互与刷新
事件回调写回 name、packs 中对应字段,依赖状态的组件随后刷新。
界面提供可用数量、待冷冻、可使用或已借出状态,每次操作都有明确反馈。
20.4 边界与结论
源码执行的边界是:空名称不能新增;新冰袋默认未冷冻且未借出。
家用冰袋库存在输入或函数层落实边界,避免异常值破坏双布尔状态、可用条件、对象数组和新增默认值。
| 性能与可维护性分析维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | name、packs | 保存业务数据 |
| 规则 | 可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组 | 生成可用数量、待冷冻、可使用或已借出状态 |
| 边界 | 空名称不能新增;新冰袋默认未冷冻且未借出 | 阻止无效状态 |
| 反馈 | 可用数量、待冷冻、可使用或已借出状态 | 形成可读结论 |
二十一、真实源码分段解读
21.1 源码片段 1
以下代码直接取自家用冰袋库存页面。
interface IcePack { name: string; frozen: boolean; borrowed: boolean }
@Entry
@Component
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
21.2 源码片段 2
以下代码直接取自家用冰袋库存页面。
struct Index {
@State name: string = '';
@State packs: IcePack[] = [
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
21.3 源码片段 3
以下代码直接取自家用冰袋库存页面。
{ name: '大号蓝色冰袋', frozen: true, borrowed: false },
{ name: '便携小冰袋', frozen: false, borrowed: false }
];
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
21.4 源码片段 4
以下代码直接取自家用冰袋库存页面。
add(): void { if (this.name.trim().length === 0) return; let item: IcePack = { name: this.name.trim(), frozen: false, borrowed: false }; this.packs = [item].concat(this.packs); this.name = ''; }
toggleFrozen(index: number): void { this.packs[index].frozen = !this.packs[index].frozen; this.packs = this.packs.slice(); }
toggleBorrowed(index: number): void { this.packs[index].borrowed = !this.packs[index].borrowed; this.packs = this.packs.slice(); }
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
21.5 源码片段 5
以下代码直接取自家用冰袋库存页面。
build() {
Column() {
Row() { Text('家用冰袋库存').fontSize(26).fontWeight(FontWeight.Bold).layoutWeight(1); Text(this.packs.filter((v: IcePack) => v.frozen && !v.borrowed).length + ' 个可用').fontColor('#175CD3') }.width('100%')
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
21.6 源码片段 6
以下代码直接取自家用冰袋库存页面。
Text('记录冰袋是否冷冻以及是否被借出').fontSize(14).fontColor('#667085').width('100%').margin({ top: 6, bottom: 18 })
Row() { TextInput({ text: this.name, placeholder: '新冰袋名称' }).layoutWeight(1).onChange((v: string) => this.name = v); Button('添加').margin({ left: 8 }).onClick(() => this.add()) }.width('100%')
Scroll() { Column() { ForEach(this.packs, (item: IcePack, index: number) => {
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
21.7 源码片段 7
以下代码直接取自家用冰袋库存页面。
Column() { Row() { Text(item.name).fontSize(17).fontWeight(FontWeight.Medium).layoutWeight(1); Text(item.borrowed ? '已借出' : item.frozen ? '可使用' : '待冷冻').fontSize(13).fontColor(item.borrowed ? '#B54708' : item.frozen ? '#175CD3' : '#667085') }; Row() { Button(item.frozen ? '移出冷冻' : '标记已冷冻').layoutWeight(1).height(36).backgroundColor('#EAF2FF').fontColor('#175CD3').onClick(() => this.toggleFrozen(index)); Button(item.borrowed ? '登记归还' : '登记借出').layoutWeight(1).height(36).margin({ left: 8 }).backgroundColor('#EEF2F6').fontColor('#344054').onClick(() => this.toggleBorrowed(index)) }.width('100%').margin({ top: 10 }) }.width('100%').padding(15).backgroundColor('#F8FAFC').borderRadius(9).margin({ bottom: 8 })
}) }.width('100%') }.layoutWeight(1).width('100%').margin({ top: 20 })
}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
21.8 源码片段 8
以下代码直接取自家用冰袋库存页面。
}
}
该片段参与记录冰袋是否冷冻、是否借出以及当前可用数量,需结合前后状态与回调理解。
二十二、典型运行案例
22.1 默认数据
使用大号冰袋已冷冻可用,便携冰袋待冷冻启动并核对可用数量、待冷冻、可使用或已借出状态。
同时观察 name、packs 和结果文案,确认结论可从源码复算。
家用冰袋库存需要重复该场景,确保旧状态不会影响下一次操作。
22.2 最小边界
调整到最小范围,验证空名称不能新增;新冰袋默认未冷冻且未借出。
同时观察 name、packs 和结果文案,确认结论可从源码复算。
家用冰袋库存需要重复该场景,确保旧状态不会影响下一次操作。
22.3 临界输入
围绕双布尔状态、可用条件、对象数组和新增默认值测试阈值前、阈值和阈值后。
同时观察 name、packs 和结果文案,确认结论可从源码复算。
家用冰袋库存需要重复该场景,确保旧状态不会影响下一次操作。
22.4 连续操作
连续执行 toggleFrozen 相关行为,观察累计、恢复或列表顺序。
同时观察 name、packs 和结果文案,确认结论可从源码复算。
家用冰袋库存需要重复该场景,确保旧状态不会影响下一次操作。
| 验证维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | name、packs | 保存业务数据 |
| 规则 | 可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组 | 生成可用数量、待冷冻、可使用或已借出状态 |
| 边界 | 空名称不能新增;新冰袋默认未冷冻且未借出 | 阻止无效状态 |
| 反馈 | 可用数量、待冷冻、可使用或已借出状态 | 形成可读结论 |
二十三、实现中的技术取舍
23.1 本地状态
家用冰袋库存的数据变化可在组件内直接追踪。
双布尔状态、可用条件、对象数组和新增默认值构成当前项目的重要取舍。
23.2 具名函数
toggleFrozen 为关键行为提供明确入口。
双布尔状态、可用条件、对象数组和新增默认值构成当前项目的重要取舍。
23.3 声明式组件
界面读取 name、packs,状态变化后自动刷新。
双布尔状态、可用条件、对象数组和新增默认值构成当前项目的重要取舍。
23.4 清晰边界
空名称不能新增;新冰袋默认未冷冻且未借出,因此临界输入仍有稳定反馈。
双布尔状态、可用条件、对象数组和新增默认值构成当前项目的重要取舍。
二十四、总结
家用冰袋库存使用鸿蒙 ArkTS 完成了“记录冰袋是否冷冻、是否借出以及当前可用数量”这一闭环。
状态层由 name、packs 构成,关键行为围绕 toggleFrozen 展开。
核心规则是:可用条件为 frozen 且非 borrowed,两个 toggle 分别改变冷冻和借出状态并复制数组。
源码通过空名称不能新增;新冰袋默认未冷冻且未借出保证临界状态稳定。
状态建模 决定数据关系,业务函数 决定规则可复算性,ArkUI 组件树 决定反馈及时性。
IcePack 同时保存 frozen 与 borrowed。 借出状态在显示优先级上高于冷冻状态。 可用统计要求两个布尔条件同时成立。
相关资源:
更多推荐




所有评论(0)