鸿蒙 ArkTS 实战:Family Recipe Heritage 从家传菜谱传承到厨房生活工具完整解析

前言

Family Recipe Heritage 是一个基于鸿蒙 ArkTS 的厨房生活工具,主题围绕 长辈姓名、菜名、步骤照片、味道备注、节日标签和传承记录 展开。它把家庭饮食里的一个具体场景拆成输入、计算、保存、提醒和反馈几个环节,适合做轻量级移动端原型。

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

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

在这里插入图片描述

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

一、项目定位与业务场景

1.1 应用定位

用户记录长辈、菜品、味道备注和节日标签,并通过步骤照片沉淀家庭菜谱记忆。

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

1.2 使用价值

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

二、源码入口与页面结构

2.1 入口组件

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

@Entry
@Component
struct Index {
  build() {
    Scroll() {
      Column({ space: 16 }) {
        Text('Family Recipe Heritage')
      }
    }
  }
}

2.2 页面结构

页面可以拆成以下区域:

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

三、状态模型抽象

3.1 业务模型

从源码可以抽象出 RecipeHeritageState

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

3.2 实际状态代码

项目中的真实状态如下。

@State elder: string = 'Grandma';
@State dish: string = 'Braised pork';
@State photoSteps: number = 6;
@State tasteNote: string = 'Less sugar, soft texture';
@State festival: string = 'Spring Festival';

3.3 状态职责

状态 类型 职责
elder 状态字段 支撑 家传菜谱传承 的输入、计算或反馈
dish 状态字段 支撑 家传菜谱传承 的输入、计算或反馈
photoSteps 状态字段 支撑 家传菜谱传承 的输入、计算或反馈
tasteNote 状态字段 支撑 家传菜谱传承 的输入、计算或反馈
festival 状态字段 支撑 家传菜谱传承 的输入、计算或反馈
status 状态字段 支撑 家传菜谱传承 的输入、计算或反馈

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

四、默认数据与首屏体验

4.1 默认内容

默认项 字段 含义
Grandma elder 默认长辈
Braised pork dish 默认菜名

4.2 默认内容的作用

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

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

五、核心计算或保存逻辑

5.1 主函数

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

saveRecipe(): void {
  this.status = this.elder + "'s " + this.dish + ' tagged for ' + this.festival + '.';
}

5.2 流程说明

  1. 填写长辈姓名
  2. 记录菜名和味道
  3. 添加节日标签
  4. 保存菜谱或增加步骤照片

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

六、辅助动作设计

6.1 辅助函数

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

addStepPhoto(): void {
  this.photoSteps++;
  this.status = 'Step photo added. Total: ' + this.photoSteps + '.';
}

6.2 为什么需要辅助动作

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

七、输入组件设计

7.1 TextInput 绑定

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

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

7.2 数字输入

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

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

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

八、指标展示策略

8.1 核心指标

项目关注的核心指标是 Step photos

Text('Step photos ' + 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('Family Recipe Heritage')
    // inputs
    // metric
    // buttons
    // feedback
  }.padding(20).width('100%')
}

10.2 视觉层级

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

十一、运行验证路径

11.1 手工验证

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

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

11.2 验证重点

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

十二、边界情况处理

12.1 数值边界

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

const safe = Math.max(0, Number(text));

12.2 业务边界

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

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

13.1 业务扩展

后续可以加入语音故事、步骤相册、家庭成员协作、节日菜单和菜谱导出。

13.2 工程抽象

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

interface KitchenRecord {
  name: string;
  value: number;
  unit: string;
  note: string;
  createdAt: number;
}

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

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

十四、维护与优化建议

14.1 状态拆分

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

14.2 函数命名

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

function formatMessage(prefix: string, value: string): string {
  return prefix + ': ' + value;
}

14.3 结果复用

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

十五、工程复盘

15.1 当前实现亮点

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

15.2 可复用经验

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

总结

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


相关资源:

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐