news 2026/7/15 21:33:51

鸿蒙 ArkTS 实战:Low Salt Diet Helper 从健康记录到状态反馈完整解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙 ArkTS 实战:Low Salt Diet Helper 从健康记录到状态反馈完整解析

鸿蒙 ArkTS 实战:Low Salt Diet Helper 从健康记录到状态反馈完整解析

前言

低盐饮食助手 是一个面向健康管理与生活习惯的鸿蒙 ArkTS 小应用。记录菜品、盐分限制、收藏状态和摄入总量,辅助低盐饮食管理。 本文基于 entry/src/main/ets/pages/Index.ets 的真实源码结构展开,重点分析interface 模型@State 状态业务方法Builder 卡片和页面布局,形成可直接发布的技术文章。

图示说明:页面以健康记录、行动打卡、状态反馈和历史卡片为主体,适合作为 ArkTS 健康类单页应用示例。

一、应用定位与业务闭环

1.1 场景定位

Low Salt Diet Helper 把一个具体健康习惯场景做成可操作页面。用户可以记录数据、查看当前状态、执行打卡或复查动作,并通过卡片列表保留过程记录。

业务环节页面表现ArkTS 实现
数据记录输入、按钮、卡片@State + ForEach
当前状态数值、消息、开关状态字段驱动
行动反馈完成、复查、勾选private 方法
历史复盘列表卡片Builder 渲染
目标追踪目标值和完成度派生计算

1.2 阅读路径

  1. 看接口,明确记录对象。
  2. 看状态,明确页面刷新来源。
  3. 看方法,明确用户动作。
  4. 看 Builder,明确 UI 复用方式。

工程判断:健康类工具的重点不是复杂页面,而是让记录、状态和反馈之间保持一致。

二、工程结构与入口页面

2.1 文件结构

核心文件是 entry/src/main/ets/pages/Index.ets。

Low Salt Diet Helper ├── AppScope ├── entry │ └── src │ └── main │ ├── ets │ │ └── pages │ │ └── Index.ets │ └── module.json5 ├── hvigor └── oh-package.json5

2.2 页面入口

@Entry@Componentstruct Index{build(){Column(){// 健康记录与状态反馈}}}

2.3 技术组成

技术点作用价值
ArkTS类型与逻辑管理健康数据
ArkUI声明式 UI构建页面卡片
@State响应式状态驱动即时反馈
@BuilderUI 复用统一卡片结构
Hvigor构建系统编译运行应用

三、数据模型设计

3.1 接口清单

源码中的接口包括:DietItem。

interfaceDietItem{id:number;title?:string;value?:number;done?:boolean;note?:string;}

接口会承载情绪、饮食、运动、午睡、健康档案、护理记录、补给节点或体检指标等业务对象。

3.2 字段职责

字段类别常见字段作用
标识字段id列表 key
名称字段itle、
ame卡片主标题
数值字段score、 loors、minutes健康指标
状态字段done、checked、bnormal结果判断
文案字段message、suggestion、contact反馈说明

3.3 建模收益

接口建模能让健康记录具备稳定结构。后续扩展本地存储、图表、提醒或分享时,可以直接围绕模型字段处理。

四、@State 状态拆解

4.1 状态清单

源码中的状态包括:items、draft、limit、message。

@Staterecords:DietItem[]=[];@StatedraftText:string='';@Statemessage:string='';@Stateenabled:boolean=true;

4.2 状态分类

状态类型示例用途
列表状态$primaryState保存记录或节点
输入状态draft、 riggerDraft、symptomDraft接收用户输入
数值状态loors、goal、sitting、seconds形成指标
开关状态larmOn、privacyLock、offline控制功能模式
反馈状态message、suggestion、
eminder呈现结果

4.3 更新方式

privateupdateItem(id:number):void{this.records=this.records.map((item:DietItem)=>{returnitem.id===id?{...item,done:true}:item;});}

五、核心方法解析

5.1 方法清单

源码中的核心方法包括:total、addDish、toggleFavorite、card。

方法类型作用示例
新增方法创建记录ddMood、ddDish、ddLog
行动方法完成或触发动作stand、drink、
echeck
统计方法计算总量或异常otal、bnormal、successDays
卡片方法渲染记录card
辅助方法最新记录或提醒latest、
estNeeded

5.2 新增记录

privateaddRecord():void{consttext=this.draftText.trim();if(text.length===0){return;}this.records=[{id:Date.now(),title:text,done:false},...this.records];this.draftText='';}

5.3 动作反馈

privatefinishAction(id:number):void{this.records=this.records.map((item:DietItem)=>{returnitem.id===id?{...item,done:true}:item;});this.message='已记录本次动作';}

5.4 指标统计

privatedoneCount():number{returnthis.records.filter((item:DietItem)=>item.done).length;}

六、Builder 卡片复用

6.1 Builder 清单

源码中的 Builder 组件包括:card。

@Builderprivatecard(item:DietItem){Column(){Text(item.title??item.name??'记录').fontSize(16).fontWeight(FontWeight.Bold)}.padding(14).backgroundColor('#FFFFFF').borderRadius(8)}

6.2 复用价值

组件作用
card统一记录卡片
状态文本呈现当前反馈
操作按钮触发打卡或复查
列表区域承载历史记录

6.3 分工边界

Builder 只描述 UI,业务判断留给 private 方法。这样可以避免卡片内部逻辑过重。

七、页面布局结构

7.1 基础布局

Scroll(){Column(){// 顶部状态// 输入区域// 操作按钮// 历史卡片}.padding(16)}

7.2 信息分区

区域内容价值
顶部状态当前指标和建议快速判断
输入区域触发因素或记录值完成记录
操作区域打卡、复查、勾选推进状态
卡片列表历史和节点支持复盘
反馈文案消息提示确认结果

7.3 列表渲染

ForEach(this.records,(item:DietItem)=>{this.card(item)},(item:DietItem)=>item.id.toString())

八、交互链路

8.1 输入链路

TextInput({text:this.draftText}).onChange((value:string)=>{this.draftText=value;})

8.2 按钮链路

Button('记录').onClick(()=>{this.addRecord();})

8.3 反馈链路

privatesetMessage(text:string):void{this.message=text;}

实现重点:输入负责采集,方法负责处理,状态负责保存,UI 负责展示。四个职责不要混在一起。

九、健康场景表达策略

9.1 反馈层级

反馈类型页面表达
当前状态数值和标题
行动建议文案提示
历史记录卡片列表
异常提醒高亮颜色
安全信息联系人或离线标识

9.2 数据边界

健康数据需要基础校验。例如目标值不能为 0,指标不能为空,异常状态需要清楚说明。

9.3 隐私意识

周期、健康档案、体检指标等信息属于敏感数据,后续扩展时应加入本地保护或隐私锁。

十、运行与调试

10.1 DevEco Studio 运行

# 打开项目目录# 同步依赖# 运行 entry 模块

10.2 Hvigor 构建

hvigorw clean hvigorw assembleHap

10.3 调试点

调试项判断标准
输入状态输入后字段是否变化
列表刷新新记录是否出现
按钮动作点击后状态是否推进
统计结果数字是否与列表一致
反馈消息操作后是否更新

十一、可维护性分析

11.1 文件规模

当前 Index.ets 约 70 行,属于轻量单页规模。继续扩展时可以拆分为输入组件、状态卡组件和记录列表组件。

11.2 状态收敛

能从列表计算的内容尽量使用方法派生,不要重复保存。

privaterecordCount():number{returnthis.records.length;}

11.3 逻辑复用

新增、完成、统计、反馈等逻辑可以抽象为同类健康工具模板。

十二、扩展方向

12.1 本地存储

interfaceHealthStoreItem{id:number;type:string;payload:string;updatedAt:number;}

12.2 通知提醒

护眼、午睡、口腔护理、站立办公、体检复查都适合接入提醒。

12.3 图表展示

步数、心情、饮食、健康指标可以扩展趋势图,提高复盘效率。

十三、同类模板抽象

13.1 数据模板

interfaceHealthItem{id:number;title:string;done:boolean;}

13.2 状态模板

@Stateitems:HealthItem[]=[];@Statemessage:string='';

13.3 卡片模板

@BuilderprivatehealthCard(item:HealthItem){Row(){Text(item.title).layoutWeight(1)Text(item.done?'已完成':'待处理')}.padding(12)}

十四、实现亮点

14.1 模型轻量

Low Salt Diet Helper 使用 DietItem 描述业务对象,既保持结构清晰,也避免过度设计。

14.2 状态明确

items、draft、limit、message 覆盖核心交互状态,页面刷新路径直接。

14.3 方法集中

total、addDish、toggleFavorite、card 将业务动作集中到方法中,便于维护。

十五、总结

Low Salt Diet Helper 是一个典型的鸿蒙 ArkTS 健康类小工具。它通过 DietItem 建模业务对象,通过 items、draft、limit、message 管理页面状态,通过 total、addDish、toggleFavorite、card 完成饮食记录、统计和收藏切换,再通过 card 渲染统一卡片。

这类项目的核心价值在于把一个健康场景做成闭环:记录入口明确,状态反馈及时,历史信息可复盘,后续可以自然扩展提醒、隐私保护、本地存储和图表展示。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是我持续创作的动力!


相关资源:

  • HarmonyOS Developer
  • ArkTS 语言基础
  • ArkUI 声明式开发
  • DevEco Studio
  • Stage 模型应用包结构
    - HarmonyOS 应用开发指南
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 21:33:25

转置卷积(Transposed Convolution)—— 上采样

核心思想:每个输入像素"铺开"成一个核 普通卷积是多个输入像素合并成1个输出像素。 转置卷积反过来:1个输入像素"生成"多个输出像素。具体例子 设定 输入:22 的特征图卷积核:22(为了简单&#xff…

作者头像 李华
网站建设 2026/7/15 21:30:09

磁悬浮压缩机的一些介绍

磁悬浮是利用磁性“同性相斥,异性相吸”的原理,在轴承的转子和定子间加上相应的电磁场,通过控制电磁场,使之处于相对“悬浮”状态。磁悬浮系统,它是由转子、传感器、控制器和执行器4部分组成,其中执行器包括…

作者头像 李华
网站建设 2026/7/15 21:28:51

从数据库到 Fiori 页面,Field Extensibility 如何让自定义字段贯穿整条应用链路

一张销售订单页面里,业务部门增加了一个很具体的要求,订单项目除了物料、数量、净值,还要记录客户包装等级。这个字段既不是临时备注,也不能只停留在浏览器页面里。它需要写入数据库,参与查询,通过 OData 服务传到前端,在 SAP Fiori 页面上显示,还可能进入报表、打印表…

作者头像 李华
网站建设 2026/7/15 21:25:09

TUSB8044A USB集线器配置寄存器详解与I2C/SMBus编程实战

1. 项目概述与核心价值在嵌入式硬件和USB外设开发领域,尤其是设计USB 3.2集线器或扩展坞时,我们常常会遇到一个核心需求:如何让同一颗硬件芯片,在不同的产品形态和应用场景下,表现出不同的“性格”?这里的“…

作者头像 李华