鸿蒙 ArkTS 实战:Leftover Recipe Remix 从剩菜食谱改造到厨房生活工具完整解析

📅 2026/7/20 12:45:55 👁️ 阅读次数 📝 编程学习
鸿蒙 ArkTS 实战:Leftover Recipe Remix 从剩菜食谱改造到厨房生活工具完整解析

鸿蒙 ArkTS 实战:Leftover Recipe Remix 从剩菜食谱改造到厨房生活工具完整解析

前言

Leftover Recipe Remix 是一个基于鸿蒙 ArkTS 的厨房生活工具,主题围绕剩余食材、存放时长、推荐食谱、收藏数量和新鲜度提醒展开。它把家庭饮食里的一个具体场景拆成输入、计算、保存、提醒和反馈几个环节,适合做轻量级移动端原型。

本文直接依据项目Index.ets源码写作,重点分析状态字段如何绑定页面,按钮动作如何修改业务状态,以及结果文案如何帮助用户完成下一步操作。

厨房工具的体验重点是快:打开页面、改一两个字段、点一个按钮,就应该看到明确结果。

这张图可作为文章配图。实际发布时可以替换为应用运行截图,让读者更直观看到输入区、指标区和反馈区。

一、项目定位与业务场景

1.1 应用定位

用户输入剩余食材和存放小时数,应用根据时长推荐安全的改造食谱,并支持保存做法。

这个项目的技术重点不是复杂算法,而是把一个生活场景拆成清楚的状态和动作。这样的代码非常适合学习 ArkTS 单页应用的状态管理。

1.2 使用价值

价值说明页面体现
快速记录减少纸笔记录成本TextInput
即时计算自动得出关键结果Favorites
行为沉淀保存次数、备注或状态@State
决策辅助用反馈文案提示下一步状态文本

二、源码入口与页面结构

2.1 入口组件

项目使用标准 ArkTS 页面结构。

@Entry@Componentstruct Index{build(){Scroll(){Column({space:16}){Text('Leftover Recipe Remix')}}}}

2.2 页面结构

页面可以拆成以下区域:

  • 标题区:展示Leftover Recipe Remix
  • 输入区:填写菜谱、库存、参数、评分或备注。
  • 指标区:展示Favorites
  • 动作区:执行保存、推荐、计算或记录。
  • 反馈区:显示计划、提醒、结果或警告。

三、状态模型抽象

3.1 业务模型

从源码可以抽象出LeftoverRemixState

typeLeftoverRemixState={title:string;metric:string|number;note:string;status:string;};

3.2 实际状态代码

项目中的真实状态如下。

@Stateleftover:string='Rice, egg, carrot';@StateshelfHours:string='18';@StatefavoriteCount:number=4;@Staterecipe:string='Fried rice with soft egg';

3.3 状态职责

状态类型职责
leftover状态字段支撑 剩菜食谱改造 的输入、计算或反馈
shelfHours状态字段支撑 剩菜食谱改造 的输入、计算或反馈
favoriteCount状态字段支撑 剩菜食谱改造 的输入、计算或反馈
recipe状态字段支撑 剩菜食谱改造 的输入、计算或反馈
reminder状态字段支撑 剩菜食谱改造 的输入、计算或反馈

这些状态字段都能直接在页面上找到对应位置,说明项目没有堆叠无用状态。

四、默认数据与首屏体验

4.1 默认内容

默认项字段含义
Rice, egg, carrotleftover默认剩余食材
18shelfHours默认存放时长

4.2 默认内容的作用

默认内容让用户第一次打开页面就能理解用途。比如剩菜食谱改造不是空白表单,而是带着一个可直接编辑的示例。

  1. 示例文本降低理解成本。
  2. 默认指标让页面更完整。
  3. 按钮可以马上测试。

五、核心计算或保存逻辑

5.1 主函数

项目最核心的业务逻辑如下。

recommend():void{lethours=Number(this.shelfHours);this.recipe=hours>24?'Use only after smell check: soup or discard risky food':'Quick remix: '+this.leftover+' stir fry';this.reminder=hours>24?'Freshness alert: eat carefully.':'Recipe recommended from remaining ingredients.';}

5.2 流程说明

  1. 输入剩余食材
  2. 输入存放时长
  3. 推荐改造食谱
  4. 保存做法并更新收藏

这条流程覆盖了用户从输入到结果的主要路径,是整篇应用逻辑的主线。

六、辅助动作设计

6.1 辅助函数

项目还提供了辅助动作,用来补充保存、复用、提醒或二次处理。

saveRecipe():void{this.favoriteCount++;this.reminder='Saved method: '+this.recipe+'.';}

6.2 为什么需要辅助动作

动作类型作用示例场景
保存固化当前记录菜谱、笔记、口味
复用复用已有参数咖啡冲煮、早餐模板
提醒给出风险或计划库存、外卖、剩菜
计算生成费用、克重、库存火锅、烘焙、茶饮

七、输入组件设计

7.1 TextInput 绑定

输入框使用onChange同步到状态字段。

TextInput({text:this.leftover,placeholder:'Input value'}).onChange((value:string)=>this.leftover=value)

7.2 数字输入

涉及克重、比例、库存、费用、人数、评分等数据时,源码会使用数字输入或Number()转换。

constvalue=Number(inputText);if(Number.isNaN(value)){// keep previous state or show message}

数字处理越稳,厨房工具越可信。

八、指标展示策略

8.1 核心指标

项目关注的核心指标是Favorites

Text('Favorites '+value).fontSize(24).fontWeight(FontWeight.Bold)

8.2 指标分类

指标类型示例作用
数量库存、照片、收藏、打卡表示积累
费用人均成本、总收入辅助决策
时间计时、准备分钟管理流程
评分店铺、风味、失败次数形成复盘

九、反馈文案设计

9.1 文案职责

反馈文案让用户知道操作结果。

this.status='Action completed.';this.reminder='Next step is ready.';

9.2 好文案标准

标准说明例子
具体包含当前对象保存了某个菜谱
可执行指向下一步加入购物清单
可复盘保留问题信息外卖配送问题
不打扰简短明确库存已更新

十、布局与视觉结构

10.1 Scroll + Column

页面使用ScrollColumn组织内容,适合表单型工具。

Scroll(){Column({space:16}){Text('Leftover Recipe Remix')// inputs// metric// buttons// feedback}.padding(20).width('100%')}

10.2 视觉层级

层级内容目的
标题应用名称快速识别
输入用户数据修改业务状态
指标关键结果给出判断依据
按钮业务动作推动流程
文案反馈说明指导下一步

十一、运行验证路径

11.1 手工验证

可以按下面流程验证页面:

  1. 打开页面,确认标题为Leftover Recipe Remix
  2. 检查默认输入值是否显示。
  3. 修改第一个输入框。
  4. 点击主按钮。
  5. 观察指标或反馈文案是否变化。
// 手工验证伪代码constbefore='default kitchen state';constaction='tap main button';constafter='metric or message updated';console.info(before+' -> '+action+' -> '+after);

11.2 验证重点

验证点预期
输入同步状态随输入变化
主按钮执行业务函数
指标根据状态重新计算
文案说明操作结果
连续点击不破坏页面状态

十二、边界情况处理

12.1 数值边界

厨房工具常见数字包括人数、克重、库存、费用、时间和评分。

constsafe=Math.max(0,Number(text));

12.2 业务边界

场景风险处理方式
人数为 0除法异常使用Math.max(1, value)
库存不足负库存使用下限保护
存放过久食安风险给出提醒
评分太低误复购阻止或提醒
比例为空换算异常保留结果提示

十三、扩展为完整厨房应用

13.1 业务扩展

后续可以加入食材保质期库、风险提示、冰箱库存联动、菜谱推荐算法和收藏夹。

13.2 工程抽象

可以抽象统一厨房记录模型。

interfaceKitchenRecord{name:string;value:number;unit:string;note:string;createdAt:number;}functioncreateKitchenRecord(name:string,value:number,unit:string,note:string):KitchenRecord{return{name,value,unit,note,createdAt:Date.now()};}

这个模型可以支撑历史记录、库存统计、菜谱收藏和提醒系统。

十四、维护与优化建议

14.1 状态拆分

当前项目状态数量不多,适合放在页面组件中。后续如果加入历史列表或多页面,可以再拆成数据服务。

14.2 函数命名

函数名要贴合动作,例如saveNotecheckStockrecommendperPerson。这样的命名能让读者快速理解逻辑。

functionformatMessage(prefix:string,value:string):string{returnprefix+': '+value;}

14.3 结果复用

如果某个计算结果会在多个区域展示,建议封装函数,而不是复制计算表达式。

十五、工程复盘

15.1 当前实现亮点

  • 页面结构直观。
  • 状态字段贴合厨房业务。
  • 输入和反馈路径短。
  • 计算逻辑集中,易于验证。
  • 后续扩展方向清晰。

15.2 可复用经验

Leftover Recipe Remix的实现方式适合迁移到各种生活工具:菜谱、库存、清单、饮品笔记、家庭记忆和消费复盘。核心方法都是把生活里的动作抽象成状态更新。

总结

Leftover Recipe Remix用鸿蒙 ArkTS 构建了一个围绕剩菜食谱改造的厨房生活工具。它通过@State保存用户输入和结果,用TextInput收集数据,用按钮触发业务函数,再用指标和文案给出即时反馈。

从工程角度看,这个项目已经完成了单页工具最重要的闭环。后续继续接入历史记录、模板库、图片、通知或本地存储,都可以在当前结构上平滑扩展。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。

补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。


相关资源:

  • HarmonyOS 开发者官网
  • ArkTS 语言基础
  • ArkUI 组件开发