HarmonyOS 实战|中式美食系列目录:从页面体验到本地数据闭环


做 HarmonyOS 应用的时候,最容易卡住的地方不是某一个组件不会写,而是页面一多之后,状态、数据、跳转和视觉风格开始互相影响。
中式美食这个项目也是这样。一开始只是想把首页推荐、菜谱详情这些页面做好,后面慢慢会遇到很多很实际的问题:

  • 首页卡片怎么组织数据,才能方便后面复用?
  • 详情页的收藏状态,怎么和收藏页保持一致?
  • 搜索、分类、排行、食材这些入口,怎么让用户找到菜?
  • 深色模式、主题色、底部 Tab、二级页返回,怎么不互相打架?
  • 视频拆菜、自定义菜谱、笔记和我的厨房,怎么形成一个真正能长期使用的闭环?
    所以这篇不是简单堆链接,而是把这一组文章按工程路线重新整理一下。你可以把它当成中式美食的 HarmonyOS 实战地图:想补哪一块,就从哪一块看。

本文验证环境

项目 版本或范围
开发工具 DevEco Studio 6.0.0 Release
HarmonyOS SDK API 20
语言与框架 ArkTS 6.0 / ArkUI V2
工程模型 Stage 模型
整理对象 中式美食 HarmonyOS 应用
主要关注 页面体验、本地仓储、状态同步、路由闭环、系列内链

这张表不是摆样子,主要是为了让读者知道:下面这些页面和代码思路,是围绕 ArkUI V2 和 Stage 模型下的真实业务应用整理出来的,不是脱离项目的概念整理。

先看这条主线

如果你是第一次看这个系列,建议按下面的顺序走:

顺序 模块 解决的问题 适合关注
01 首页推荐流 应用第一屏怎么组织内容和卡片 数据建模、推荐卡片、首屏体验
02 菜品详情页 一道菜的信息怎么讲清楚 详情结构、步骤、营养、收藏状态
03 搜索页 用户输入关键词后怎么给出靠谱结果 输入态、搜索历史、相关度排序
04 收藏状态 收藏按钮不是只改图标,还要有数据闭环 ArkTS 持久化、页面同步
05 省市菜系页 地域和菜系如何做筛选联动 筛选模型、详情跳转、空态
06 视频拆菜页 从视频内容里提取可编辑菜谱 字幕因子、人工校对、草稿保存
07 深色模式 主题服务怎么影响全局页面 ThemeService、色板、系统配置
08 自定义菜谱 用户自己创建的菜怎么进系统 表单解析、仓储、搜索合流
09 笔记体系 做菜笔记怎么回写到详情和我的厨房 NoteRepository、读写连续性
10 排行榜页 排行不是摆数字,而是帮助用户决策 综合评分、人气切换、静态视觉
11 食材大全页 食材入口怎么做到可扫、可查、可跳转 分类联动、网格高度、检索入口
12 深夜食堂页 场景化入口怎么做得不乱 场景筛选、双列网格、夜宵入口
13 起源典故页 内容型页面怎么和菜谱详情连接 故事数据、卡片叙事、详情跳转
14 列表页筛选 关键词、排序、清空默认态如何协作 筛选体验、状态复位、列表稳定
15 我的厨房页 用户资产怎么集中展示 收藏统计、菜谱草稿、课堂入口

这条线看下来,基本就能看到一个业务应用从"页面能显示",到"状态能持续",再到"用户能反复回来用"的过程。

已发布文章入口

01. 首页推荐流:先把第一屏搭稳

HarmonyOS 实战|中式美食首页推荐流:数据模型、推荐卡片与发布准备整理
这一篇适合先看。首页是整个应用的门面,推荐卡片、分类入口、今日推荐这些内容如果一开始没有拆清楚,后面详情、收藏、搜索都会跟着别扭。
我更推荐关注里面的数据组织方式:不要把 UI 写成一坨固定布局,而是先把菜品、推荐位、入口状态整理成清楚的模型,再让页面去渲染。

02. 菜品详情页:把一道菜讲完整

HarmonyOS 实战|中式美食菜品详情页:食材、步骤、营养与收藏状态设计
详情页是典型的"看起来简单,做起来容易散"的页面。标题、图片、食材、步骤、营养信息、收藏按钮,每一块都不复杂,但合在一起就很考验层级。
这一篇的重点是:详情页不能只是展示字段,它要帮用户快速判断"这道菜我能不能做、值不值得收藏、下一步点哪里"。

03. 搜索页:输入态和结果排序要一起设计

HarmonyOS 实战|中式美食搜索页:ArkUI V2 输入态、搜索历史与相关度排序
搜索页最容易被写成一个输入框加列表,但真正好用的搜索页,关键在搜索前、搜索中、搜索后这几个状态。
这里重点看三件事:输入态怎么反馈、搜索历史怎么存、相关度排序怎么让结果看起来"真的懂用户在找什么"。

04. 收藏状态:别让收藏只停在按钮动画

HarmonyOS 实战|中式美食收藏状态:ArkTS 持久化封装、详情同步与收藏页刷新
收藏功能不是点一下变红这么简单。真正麻烦的是:详情页收藏了,收藏页要能看到;收藏页取消了,详情页回来也要同步;重启应用之后状态还不能丢。
这一篇适合关注 ArkTS 持久化封装,以及页面之间如何围绕同一份状态协作。

05. 省市菜系页:筛选联动要讲得通

HarmonyOS 实战|中式美食省市菜系页:地域数据建模、筛选联动与详情跳转闭环
省市和菜系这种页面,很容易做成"按钮很多但用户不知道点完会发生什么"。所以这里的重点是筛选模型:省份、城市、菜系、结果列表之间要有稳定关系。
如果你在做内容型工具、生活服务类应用,这一篇的联动思路可以直接借鉴。

06. 视频拆菜页:把识别结果变成可编辑草稿

HarmonyOS 实战|中式美食视频拆菜页:字幕因子提取、人工校对与自定义菜谱保存
视频拆菜这块比较有意思,因为它不是单纯展示页面,而是从识别结果进入人工确认,再进入菜谱草稿。
工程上最关键的是:识别结果不能直接当最终数据,要留出"可确认、可修改、可回看"的空间。这样用户才会觉得功能可靠。

07. 深色模式:主题服务要能照顾多页面

HarmonyOS 实战|中式美食深色模式:ThemeService、全局色板与系统配置同步
深色模式不是把背景改黑就结束。中式美食这种有图片、有卡片、有标签、有底部导航的应用,如果色板没有统一,页面会很快变乱。
这一篇重点看 ThemeService 的思路:把颜色、状态和系统配置放在一个统一入口里,不要每个页面自己临时判断。

08. 自定义菜谱:用户内容也要进入全站能力

HarmonyOS 实战|中式美食自定义菜谱:表单解析、UserDishRepository 与全站检索合流
用户自己创建的菜谱,如果只能停在一个孤立页面里,价值会很弱。更好的做法是让它进入搜索、收藏、详情、我的厨房这些全站能力。
这一篇适合看 Repository 的分层方式,以及用户数据怎么和内置数据合流。

09. 笔记体系:让用户回来时还能接着做

HarmonyOS 实战|中式美食笔记体系:NoteRepository、详情页回写与我的厨房连续性
笔记功能的价值不在"能写字",而在它能不能帮用户下次继续做。比如上次做到哪一步、有哪些调整、这道菜有没有踩坑。
这篇文章里可以重点看 NoteRepository 怎么把详情页和我的厨房串起来。

10. 排行榜页:排序规则要能帮助选择

HarmonyOS 实战|中式美食排行榜页:综合评分、人气切换与首屏静态视觉兜底
排行榜页不是越热闹越好,核心是帮助用户做选择。综合评分、人气、推荐理由这些信息要有主次,不然用户看完还是不知道点哪一个。
这一篇适合关注首屏稳定性和排序切换的体验。

11. 食材大全页:检索入口要服务真实找菜场景

HarmonyOS 实战|中式美食食材大全页:分类联动、网格稳定高度与食材检索入口设计
很多人打开美食应用不是先想好菜名,而是先看手里有什么食材。所以食材大全页更像一个反向找菜入口。
这一篇重点看分类联动、网格高度和检索入口,尤其适合做内容库、商品库、资料库类页面时参考。

12. 深夜食堂页:场景化页面要克制

HarmonyOS 实战|中式美食深夜食堂页:场景筛选、双列网格与夜宵入口体验
深夜食堂这种页面很容易做得太氛围化,但真正有用的还是筛选和入口。用户不是来看海报的,是想快速找到"现在适合吃什么"。
这一篇可以看场景筛选和双列网格怎么配合。

13. 起源典故页:内容页也要能回到业务路径

HarmonyOS 实战|中式美食起源典故页:故事数据筛选、卡片叙事与详情页跳转
起源典故页偏内容,但它不能和菜谱体系断开。故事看完之后,用户应该能继续去详情页、收藏页或相关菜系。
这一篇适合关注内容卡片和业务跳转之间的关系。

14. 列表页筛选:清空默认态很重要

HarmonyOS 实战|中式美食列表页筛选体验:关键词命中、排序切换与清空回到默认态
列表页筛选最常见的问题是:筛选条件越来越多,用户不知道当前列表为什么是这样。
所以清空默认态、排序切换、关键词命中提示都很重要。它们不是小细节,而是列表页是否可信的关键。

15. 我的厨房页:把用户资产收回来

HarmonyOS 实战|中式美食我的厨房页:收藏笔记统计、菜谱草稿入口与烹饪课堂展开态
我的厨房页像一个用户资产中心。收藏、笔记、自定义菜谱、视频拆菜草稿、课堂入口,都应该能在这里找到。
这一篇重点看"用户做过的事"怎么变成页面里的持续价值,而不是散落在各个功能里。

这些文章背后的工程分层

如果把中式美食拆成工程模块,大概可以这样理解:

ts 复制代码
type AppModule =
  | 'home'
  | 'detail'
  | 'search'
  | 'favorite'
  | 'region'
  | 'video'
  | 'theme'
  | 'userDish'
  | 'note'
  | 'rank'
  | 'ingredient'
  | 'scene'
  | 'story'
  | 'profile';

interface SeriesRoute {
  module: AppModule;
  page: string;
  repository?: string;
  userValue: string;
}

const zhongShiMeiShiRoutes: SeriesRoute[] = [
  {
    module: 'home',
    page: 'HomePage',
    userValue: '打开应用后先看到今日推荐、分类入口和关键菜品',
  },
  {
    module: 'detail',
    page: 'DishDetailPage',
    repository: 'FavoriteRepository',
    userValue: '看清楚一道菜的食材、步骤、营养和收藏状态',
  },
  {
    module: 'search',
    page: 'SearchPage',
    repository: 'SearchHistoryRepository',
    userValue: '通过关键词、历史记录和相关度排序快速找到菜',
  },
  {
    module: 'profile',
    page: 'ProfileKitchenPage',
    repository: 'NoteRepository / UserDishRepository',
    userValue: '把收藏、笔记、草稿和课堂入口集中管理',
  },
];

我自己整理下来,一个 HarmonyOS 业务应用要长期维护,最好不要只按页面切。页面只是用户看到的结果,背后还要按这几层去想:

  • UI 层:页面布局、卡片、列表、空态、底部导航。
  • 状态层:收藏、搜索条件、主题、当前 Tab、二级页栈。
  • 仓储层:Preferences、本地列表、用户菜谱、笔记、最近浏览。
  • 路由层:首页到详情、分类到列表、我的厨房到草稿。
  • 内容层:菜品、食材、故事、场景、视频拆菜结果。
    页面写得漂亮只能解决第一眼的问题。真正让用户觉得这个应用能用,是状态和数据能不能接得住。

我最建议优先看的 4 篇

如果你时间不多,可以先看这 4 篇:

优先级 文章 为什么先看
1 搜索页 能看到输入态、历史记录、排序这些真实业务状态
2 收藏状态 能看到本地持久化和多页面同步
3 视频拆菜页 能看到"识别结果到人工确认"的产品闭环
4 我的厨房页 能看到用户资产如何收束到一个入口

这 4 篇基本覆盖了 ArkUI 页面、状态管理、本地数据和用户路径。看完再回头看首页、详情、排行榜、食材、故事页,会更容易理解为什么前面要这样拆。

做项目时最容易踩的坑

1. 页面先写完,数据模型后来补

这种写法前期很快,后期会越来越难改。比如首页推荐卡片、详情页、收藏页都要用到菜品数据,如果一开始字段随手写,后面每个页面都要补判断。
更稳的方式是先定一个核心模型,再让页面按需要取字段。

ts 复制代码
interface Dish {
  id: string;
  name: string;
  cover: ResourceStr;
  region: string;
  tags: string[];
  score: number;
  ingredients: string[];
  steps: string[];
}

这个模型不一定一开始就完美,但至少要让首页、详情、搜索、收藏都能围绕同一份数据说话。

2. 收藏、笔记、自定义菜谱各存各的

这会让"我的厨房"很难做。用户明明收藏过、写过笔记、保存过草稿,但页面上却找不到完整记录。
所以中式美食后面一直在做一件事:把用户行为收回来。收藏是收藏,笔记是笔记,自定义菜谱是自定义菜谱,但它们最后都要能回到我的厨房。

3. 搜索只搜菜名

美食应用里,用户不一定知道菜名。他可能只知道"鸡肉""夜宵""川菜""低脂"这些线索。
所以搜索页不能只匹配 name,还要考虑食材、标签、菜系、场景。哪怕第一版排序规则很简单,也比只搜标题强很多。

4. 主题服务分散在每个页面

每个页面自己判断深色模式,短期能跑,长期一定乱。卡片背景、文字色、边框、标签、底部 Tab 都会有细微差异。
更好的做法是把主题能力收敛成统一服务,让页面只关心"我要什么语义颜色",不要每个页面都写一套判断。

后续怎么读更有效

如果你是为了做自己的 HarmonyOS 项目,不建议只收藏链接。更好的方式是每看一篇,就问自己三个问题:

  • 这个页面解决了什么用户问题?
  • 这个页面背后有没有需要持久化的数据?
  • 这个页面会不会影响别的入口,比如搜索、收藏、我的厨房?
    只要这三个问题能想清楚,页面就不容易写散。

小结

中式美食这个系列的价值,不在于某一个页面有多复杂,而在于它把一个真实应用拆成了很多可以复用的工程问题:推荐流、详情页、搜索、收藏、主题、笔记、视频拆菜、我的厨房。
这些问题在别的 HarmonyOS 应用里也会出现,只是内容从菜谱换成资料、商品、课程、笔记或工具而已。
如果你也在做 ArkUI 应用,可以先从搜索、收藏、本地仓储和我的厨房这几块看起。它们最能体现一个应用是不是只做了界面,还是已经开始形成自己的使用闭环。

相关推荐
解局易否结局1 小时前
鸿蒙PC应用开发:窗口管理 + 鼠标键盘交互 + 文件对话框
笔记·华为·计算机外设·交互·harmonyos
心中有国也有家1 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的三种科学模式
学习·flutter·华为·harmonyos
FrameNotWork2 小时前
HarmonyOS 6.1 Tabs组件深度定制 — 底部导航栏从入门到踩坑
华为·交互·harmonyos
不才难以繁此生3 小时前
HarmonyOS ArkUI NavPathStack 实战:中式美食详情页多入口返回栈怎么设计
harmonyos·arkts·arkui·navigation·中式美食·navpathstack·路由栈
不才难以繁此生3 小时前
ArkTS 本地数据库实战|中式美食购物清单:按菜谱来源合并食材数量
harmonyos·arkts·repository·rdb·中式美食·购物清单·本地数据库
ZZZMMM.zip3 小时前
基于鸿蒙HarmonyOS NEXT开发AI书籍推荐应用:智能阅读新体验与鸿蒙Flutter框架跨端实践
人工智能·flutter·华为·harmonyos·鸿蒙
不才难以繁此生3 小时前
HarmonyOS ResourceStr 实战:中式美食菜谱封面怎么统一注册、兜底和缓存
harmonyos·arkts·image·arkui·中式美食·resourcestr·图片缓存
Helen_cai4 小时前
OpenHarmony http 网络请求封装与全局拦截实战(API Version23 + 适配版)
网络·网络协议·http·华为·harmonyos
Helen_cai7 小时前
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构)
开发语言·华为·php·harmonyos