鸿蒙 ArkTS 实战:煮饭水量的状态建模、核心算法与交互实现
鸿蒙 ArkTS 实战:煮饭水量的状态建模、核心算法与交互实现
前言
煮饭水量是一款米水比例计算工具,用于按大米量、米种和口感偏好估算煮饭需要的加水毫升数。
项目以 ArkTS 表达状态和规则,以 ArkUI 构建交互界面,主要状态包括 riceCups、riceType、texture、water。
页面围绕 分段基础量、口感修正、半杯粒度与毫升取整 形成从输入、计算到反馈的完整链路。
默认场景为2 量杯东北米、适中口感、结果尚未计算,运行后能够直接观察建议加水毫升数或等待计算提示。
本文只分析当前 Index.ets 已实现的真实能力,并结合源码推导关键数据变化。
图 1:DevEco Studio 支持 ArkTS 编辑、构建和调试,本文页面可在该环境中运行。
状态驱动页面的核心,是让每个结果都能回到确定的输入和业务规则。
边界条件必须进入实际代码路径,而不能只停留在界面提示中。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 这也是本文分析煮饭水量时的第一条主线。
当前项目采用本地内存状态,不包含源码之外的持久化、账号或云端同步能力。
一、米水比例的变量拆分
1.1 数据与结构
煮饭水量围绕米水比例的变量拆分组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
1.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
1.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
1.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
| 米水比例的变量拆分维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | riceCups、riceType、texture、water | 保存业务数据 |
| 规则 | 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 | 生成建议加水毫升数或等待计算提示 |
| 边界 | 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 | 阻止无效状态 |
| 反馈 | 建议加水毫升数或等待计算提示 | 形成可读结论 |
二、米种基础水量映射
2.1 数据与结构
煮饭水量围绕米种基础水量映射组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
2.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
2.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
2.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
三、口感修正值的来源
3.1 数据与结构
煮饭水量围绕口感修正值的来源组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
3.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
3.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
3.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
- 读取当前状态并确认输入范围。
- 调用成员函数计算或更新目标数据。
- 应用阈值、数组复制、取整或范围保护。
- 由 ArkUI 读取新状态并刷新结果。
四、量杯数与毫升换算
4.1 数据与结构
煮饭水量围绕量杯数与毫升换算组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
4.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
4.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
4.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
| 量杯数与毫升换算维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | riceCups、riceType、texture、water | 保存业务数据 |
| 规则 | 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 | 生成建议加水毫升数或等待计算提示 |
| 边界 | 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 | 阻止无效状态 |
| 反馈 | 建议加水毫升数或等待计算提示 | 形成可读结论 |
五、结果取整的展示意义
5.1 数据与结构
煮饭水量围绕结果取整的展示意义组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
5.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
5.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
5.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
六、Select 与按钮组的分工
6.1 数据与结构
煮饭水量围绕Select 与按钮组的分工组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
6.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
6.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
6.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
- 煮饭水量只保存需要持续观察的业务状态。
- calculate 及相关函数承担当前场景的核心更新。
- 建议加水毫升数或等待计算提示把内部数据转换成可理解反馈。
- 分段基础量、口感修正、半杯粒度与毫升取整共同保证结果稳定。
七、未计算状态的表达
7.1 数据与结构
煮饭水量围绕未计算状态的表达组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
7.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
7.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
7.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
八、三种米种的样例推导
8.1 数据与结构
煮饭水量围绕三种米种的样例推导组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
8.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
8.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
8.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
| 三种米种的样例推导维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | riceCups、riceType、texture、water | 保存业务数据 |
| 规则 | 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 | 生成建议加水毫升数或等待计算提示 |
| 边界 | 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 | 阻止无效状态 |
| 反馈 | 建议加水毫升数或等待计算提示 | 形成可读结论 |
九、ArkTS 页面入口与组件职责
9.1 数据与结构
煮饭水量围绕ArkTS 页面入口与组件职责组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
9.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
9.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
9.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
- 读取当前状态并确认输入范围。
- 调用成员函数计算或更新目标数据。
- 应用阈值、数组复制、取整或范围保护。
- 由 ArkUI 读取新状态并刷新结果。
十、@State 响应式状态链路
10.1 数据与结构
煮饭水量围绕@State 响应式状态链路组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
10.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
10.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
10.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
十一、业务函数与界面构建分离
11.1 数据与结构
煮饭水量围绕业务函数与界面构建分离组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
11.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
11.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
11.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
- 煮饭水量只保存需要持续观察的业务状态。
- calculate 及相关函数承担当前场景的核心更新。
- 建议加水毫升数或等待计算提示把内部数据转换成可理解反馈。
- 分段基础量、口感修正、半杯粒度与毫升取整共同保证结果稳定。
十二、ArkUI 控件的事件回调
12.1 数据与结构
煮饭水量围绕ArkUI 控件的事件回调组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
12.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
12.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
12.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
| ArkUI 控件的事件回调维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | riceCups、riceType、texture、water | 保存业务数据 |
| 规则 | 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 | 生成建议加水毫升数或等待计算提示 |
| 边界 | 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 | 阻止无效状态 |
| 反馈 | 建议加水毫升数或等待计算提示 | 形成可读结论 |
十三、声明式刷新与结果派生
13.1 数据与结构
煮饭水量围绕声明式刷新与结果派生组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
13.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
13.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
13.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
十四、输入边界和异常值保护
14.1 数据与结构
煮饭水量围绕输入边界和异常值保护组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
14.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
14.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
14.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
十五、页面布局与信息层级
15.1 数据与结构
煮饭水量围绕页面布局与信息层级组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
15.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
15.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
15.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
- 读取当前状态并确认输入范围。
- 调用成员函数计算或更新目标数据。
- 应用阈值、数组复制、取整或范围保护。
- 由 ArkUI 读取新状态并刷新结果。
十六、颜色文字与状态反馈
16.1 数据与结构
煮饭水量围绕颜色文字与状态反馈组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
16.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
16.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
16.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
| 颜色文字与状态反馈维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | riceCups、riceType、texture、water | 保存业务数据 |
| 规则 | 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 | 生成建议加水毫升数或等待计算提示 |
| 边界 | 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 | 阻止无效状态 |
| 反馈 | 建议加水毫升数或等待计算提示 | 形成可读结论 |
十七、默认数据的首次运行
17.1 数据与结构
煮饭水量围绕默认数据的首次运行组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
17.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
17.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
17.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
十八、连续操作下的状态迁移
18.1 数据与结构
煮饭水量围绕连续操作下的状态迁移组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
18.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
18.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
18.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
- 煮饭水量只保存需要持续观察的业务状态。
- calculate 及相关函数承担当前场景的核心更新。
- 建议加水毫升数或等待计算提示把内部数据转换成可理解反馈。
- 分段基础量、口感修正、半杯粒度与毫升取整共同保证结果稳定。
十九、关键路径的验证方法
19.1 数据与结构
煮饭水量围绕关键路径的验证方法组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
19.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
19.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
19.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
二十、性能与可维护性分析
20.1 数据与结构
煮饭水量围绕性能与可维护性分析组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。
20.2 规则与原因
本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。
20.3 交互与刷新
用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。
20.4 边界与结论
当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。
| 性能与可维护性分析维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | riceCups、riceType、texture、water | 保存业务数据 |
| 规则 | 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 | 生成建议加水毫升数或等待计算提示 |
| 边界 | 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 | 阻止无效状态 |
| 反馈 | 建议加水毫升数或等待计算提示 | 形成可读结论 |
二十一、真实源码分段解读
21.1 源码片段 1
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
@Entry
@Component
struct Index {
@State riceCups: number = 2;
@State riceType: string = '东北米';
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
21.2 源码片段 2
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
@State texture: string = '适中';
@State water: number = 0;
calculate(): void {
let base: number = this.riceType === '糙米' ? 260 : this.riceType === '泰国香米' ? 190 : 210;
let adjust: number = this.texture === '偏软' ? 20 : this.texture === '偏硬' ? -15 : 0;
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
21.3 源码片段 3
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
this.water = Math.round(this.riceCups * (base + adjust));
}
build() {
Column() {
Text('煮饭水量').fontSize(28).fontWeight(FontWeight.Bold).width('100%')
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
21.4 源码片段 4
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
Text('按米量、米种与口感估算加水量').fontSize(14).fontColor('#667085').width('100%').margin({ top: 6 })
Column() {
Text(this.riceCups.toFixed(1)).fontSize(48).fontWeight(FontWeight.Bold).fontColor('#A15C00')
Text('量杯大米').fontSize(14).fontColor('#667085')
}.width('100%').padding(20).margin({ top: 24 }).backgroundColor('#FFF7E8').borderRadius(12)
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
21.5 源码片段 5
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
Text('大米用量').fontSize(16).margin({ top: 22 }).width('100%')
Slider({ value: this.riceCups, min: 0.5, max: 8, step: 0.5 }).onChange((v: number) => this.riceCups = v).width('100%')
Text('米种').fontSize(15).fontColor('#667085').margin({ top: 16 }).width('100%')
Select([{ value: '东北米' }, { value: '泰国香米' }, { value: '糙米' }]).value(this.riceType).width('100%').onSelect((i: number) => this.riceType = i === 0 ? '东北米' : i === 1 ? '泰国香米' : '糙米')
Text('口感').fontSize(15).fontColor('#667085').margin({ top: 16 }).width('100%')
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
21.6 源码片段 6
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
Row() {
ForEach(['偏硬', '适中', '偏软'], (v: string) => { Button(v).layoutWeight(1).margin({ right: v === '偏软' ? 0 : 8 }).backgroundColor(this.texture === v ? '#A15C00' : '#E8ECF0').fontColor(this.texture === v ? '#FFFFFF' : '#344054').onClick(() => this.texture = v) })
}.width('100%').margin({ top: 8 })
Button('计算加水量').width('100%').height(48).margin({ top: 24 }).onClick(() => this.calculate())
Text(this.water === 0 ? '点击计算查看结果' : '建议加水 ' + this.water + ' 毫升').fontSize(21).fontWeight(FontWeight.Bold).textAlign(TextAlign.Center).width('100%').padding(18).margin({ top: 14 }).backgroundColor('#F6F8FA').borderRadius(10)
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
21.7 源码片段 7
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
}.width('100%').height('100%').padding(24).backgroundColor('#FFFFFF')
}
}
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
21.8 源码片段 8
以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。
calculate(): void {
这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。
二十二、典型运行案例
22.1 默认数据
使用2 量杯东北米、适中口感、结果尚未计算启动,核对建议加水毫升数或等待计算提示。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。
22.2 最小边界
将参数调整到最小范围,验证量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。
22.3 临界输入
围绕分段基础量、口感修正、半杯粒度与毫升取整分别测试阈值前、阈值本身和阈值后。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。
22.4 连续操作
连续调用与 calculate 相关的操作,观察状态是否准确累积或恢复。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。
| 验证维度 | 当前实现 | 页面作用 |
|---|---|---|
| 状态 | riceCups、riceType、texture、water | 保存业务数据 |
| 规则 | 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 | 生成建议加水毫升数或等待计算提示 |
| 边界 | 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 | 阻止无效状态 |
| 反馈 | 建议加水毫升数或等待计算提示 | 形成可读结论 |
二十三、实现中的技术取舍
23.1 本地状态
煮饭水量的当前数据量适合由组件状态直接承载,所有变化都能在页面内追踪。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。
23.2 具名函数
calculate 为关键行为提供明确入口,使业务规则和组件布局保持分离。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。
23.3 声明式组件
界面直接读取 riceCups、riceType、texture、water,状态变化后不需要手动查找并修改节点。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。
23.4 清晰边界
量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换,因此极端输入不会生成难以解释的结果。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。
二十四、总结
煮饭水量使用鸿蒙 ArkTS 完成了“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”这一业务闭环。
状态层由 riceCups、riceType、texture、water 构成,关键行为围绕 calculate 和相关表达式展开。
核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
源码通过量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换保证临界状态仍然稳定。
状态建模 决定数据关系,业务函数 决定规则是否可复算,ArkUI 组件树 决定反馈是否及时。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 water 初始为 0,因此结果区域在计算前显示明确的等待状态。
相关资源:
更多推荐



所有评论(0)