当前位置: 首页 > news >正文

Flutter/HarmonyOS 实战|中式美食厨房执行页:making 状态、步骤切换与下一步提示

中式美食的链路走到买菜清单以后,下一步就是厨房执行。

这个页面和普通菜谱详情页不一样。菜谱详情页通常是“看信息”,厨房执行页更像“边做边跟”。用户手上可能有水、有油、有锅铲,不会慢慢读长段文字。所以页面必须非常直接:现在做哪一步、还剩多久、火候怎么控制、下一步是什么。

这篇拆当前项目里的KitchenExecutionPage。它的核心状态只有两个:making表示是否已经开始做菜,currentStepIndex表示当前走到第几步。两个状态配合起来,就能让预览态、制作态、当前步骤卡、下一步提示和底部按钮保持一致。

本文验证环境

项目版本或范围
开发工具Flutter / Dart 工程,配合 DevEco Studio 做 HarmonyOS 上架前体验验证
Dart SDK^3.12.2
Flutter 依赖fluttercupertino_iconsflutter_lints
HarmonyOS 目标中式美食上架后的厨房执行链路,HarmonyOS SDK API 20 作为后续适配目标
核心文件lib/main.dart
核心页面KitchenExecutionPage
核心组件KitchenMakingCardKitchenNextStepStripKitchenMakingBottomBar
核心状态makingcurrentStepIndex

这里讲的是当前 Flutter 工程里的实现。后面迁到 ArkUI 时,最值得保留的是这个状态拆法:一个状态控制页面模式,一个状态控制当前步骤。

先分清预览态和制作态

厨房执行页刚打开时,不应该直接把用户扔进倒计时。用户可能只是想先看一眼节奏。所以页面有一个making状态:

class_KitchenExecutionPageStateextendsState<KitchenExecutionPage>{bool making=false;int currentStepIndex=1;KitchenStepDatagetcurrentStep=>kitchenSteps[currentStepIndex];voidstartMaking()=>setState(()=>making=true);}

making = false时,页面展示预览:先做什么、关键调味、出锅判断。用户点“开始制作”以后,才进入真正的步骤跟随模式。

这个区别很重要。很多工具页一上来就给用户一堆步骤,用户还没准备好就被推着走。中式美食这里先给预览,再让用户主动开始,会更符合厨房场景。

当前步骤只认 currentStepIndex

当前步骤通过currentStepIndex取出来:

KitchenStepDatagetcurrentStep=>kitchenSteps[currentStepIndex];

然后页面里的标题、步骤卡、下一步提示都会围绕currentStep变化。

我不建议给标题、卡片、底部按钮分别存一套当前步骤。这样看着灵活,其实很容易错位。比如标题显示第 2 步,卡片还是第 1 步,底部按钮又跳到第 3 步。只要用户遇到一次,就会觉得这个工具不可靠。

一个 index 驱动整个页面,是更稳的写法。

完成一步,只移动 index

步骤切换也很直接:

voidcompleteStep(){setState((){making=true;currentStepIndex=(currentStepIndex+1).clamp(0,kitchenSteps.length-1,);});}voidpreviousStep(){setState((){making=true;currentStepIndex=(currentStepIndex-1).clamp(0,kitchenSteps.length-1,);});}

这里有两个细节。

第一,切换步骤时顺手把making设成true。用户点上一部或完成当前步骤,本质上已经进入制作态了,不应该再回到预览页。

第二,用clamp()卡住边界。厨房场景里用户可能连续点,边界保护必须有。否则最后一步再点一次,数组越界就是很低级的体验事故。

步骤数据要写得像厨房话

KitchenStepData不是为了服务代码,而是为了服务用户做菜:

classKitchenStepData{constKitchenStepData({requiredthis.index,requiredthis.timeRange,requiredthis.title,requiredthis.command,requiredthis.tool,requiredthis.timer,requiredthis.icon,requiredthis.ingredients,requiredthis.heat,requiredthis.seasoning,requiredthis.doneCue,requiredthis.rescue,this.warning,});}

这里我比较看重doneCuerescue

很多菜谱只写“煮 8 分钟”“大火翻炒”,但用户真正需要的是判断依据和补救办法。比如汤太油怎么办,青菜出水多怎么办,鱼太厚怎么办。把这些字段提前放进模型里,页面就能把“怎么判断”和“出错怎么救”讲清楚。

这也是中式美食和普通菜谱列表不一样的地方:它不是只告诉你做法,而是尽量让你在厨房里少慌一点。

下一步提示要一直露出来

制作态里除了当前步骤卡,还有一个下一步提示:

KitchenNextStepStrip(step:kitchenSteps[(currentStepIndex+1).clamp(0,kitchenSteps.length-1,)],isLast:currentStepIndex==kitchenSteps.length-1,)

这个设计很实用。用户在做当前步骤时,眼睛扫一下就知道下一步要准备什么。比如现在在煮汤,下一步要备鱼;现在在蒸鱼,下一步要准备上桌。这样能减少临场慌乱。

在厨房里,“下一步是什么”比“完整步骤列表”更重要。完整列表适合学习,下一步提示适合执行。

底部操作栏跟着模式变化

页面底部根据making切换两套操作:

bottomNavigationBar:making?KitchenMakingBottomBar(onPrevious:previousStep,onComplete:completeStep,):KitchenPreviewBottomBar(onStart:startMaking),

预览态只需要一个核心动作:开始制作。

制作态需要两个核心动作:上一部、完成这一步。

这个地方不要贪多。厨房里用户不需要一排按钮,不需要复杂菜单,只需要顺着走。按钮越少,越不容易误操作。

工程验收记录

检查点当前结果
预览态making=false时展示厨房节奏预览
制作态点击开始后进入making=true
当前步骤currentStepIndex驱动标题、步骤卡和下一步提示
边界保护clamp()防止上一部或下一步越界
下一步提示KitchenNextStepStrip提前告诉用户后续动作
底部操作预览态和制作态使用不同底部栏

本文小结

厨房执行页的难点不是做出一个复杂页面,而是把用户当时的状态照顾好。

还没开始做时,先给预览;开始做以后,只突出当前步骤和下一步;切换步骤时,只移动currentStepIndex,别让多个组件各管一套状态。这个思路很简单,但对生活工具特别有效。

中式美食后面如果继续做家庭偏好、库存提醒、菜谱记录,这个厨房执行页会成为很重要的承接点。因为用户真正产生价值,不是在看到推荐那一刻,而是在照着它把一桌饭做出来的时候。

最后留个问题:厨房执行页里的倒计时,你会做成真实计时器,还是先做成步骤提示和手动完成?我现在更倾向先手动完成,因为厨房节奏受锅具、火力和食材大小影响很大,强行倒计时反而容易误导。

http://www.jsqmd.com/news/1138636/

相关文章:

  • 泉州装修设计公司怎么选?报价、效果图和施工落地都要看|陶墨装饰设计
  • 太顶了!输入需求,这几款AI写作辅助平台从摘要到致谢全搞定!
  • CAN支持那些波特率,seg相位设置
  • 从零开始玩转C语言(六):结构体篇
  • 2026年GEO搜索优化究竟是什么?揭开这一神秘技术的真实面纱!
  • 功率器件热仿真 vs 公式计算:以 Infineon IMW120R007M1H 为例的 3 种方法对比
  • 2026数字经济学数据分析的技术价值与应用前景
  • 【Java毕业设计】基于 SpringBoot+Vue 的学生平时成绩考核管理系统的设计与实现 基于前后端分离的课堂形成性考核数据管理系统(源码+文档+远程调试,全bao定制等)
  • 卡梅德生物技术快报|纳米抗体技术全套实操流程:AFB1 全合成文库淘选 + 分子对接定点突变参数手册
  • 【SkyWalking从入门到精通】第07篇:远程调试那些事——线上SkyWalking Agent的正确调试姿势
  • PCB散热过孔设计:0.3mm孔径与1.2mm间距的仿真优化与实测验证
  • 基于kvcache的RAG系统
  • AIGC率怎么降?2026年降低论文AI率的6大有效方法
  • 毕业论文写作指南:2026年AI辅助写论文的7个黄金步骤
  • 深度解析Foliate:基于GTK4与WebKitGTK的现代化电子书阅读器架构设计与实现原理
  • 2026.6.7 - AB包学习(1)
  • Claude Code 实战:AI 结对编程如何真正提效,把工具链跑成稳定流程
  • 光刻、刻蚀、薄膜沉积三大主设备 2024 市场格局与国产化挑战分析
  • 16路、24路与总线舵机控制器对比:3款方案选型指南与5大关键参数实测
  • 信创替换走到RFID打印这一步,多少人卡了壳
  • 专业的电销机器人系统哪家好
  • VTube Studio API开发实战:从零构建虚拟主播控制系统的完整指南
  • 厂区全域无源无感监测,视频孪生实现变电站人员越界风险实时告警
  • 1988-2025年 上市公司数绿转型协同度数据 xlsx
  • 支付宝小程序多商户收款方案对比:2种授权模式与 app_auth_token 实战
  • 手游反外挂实战:基于app_process的APK完整性校验方案与千款机型兼容性报告
  • 麦克纳姆轮+步进电机驱动方案:工训赛智能物流小车0.1mm级循迹精度实现
  • 汉明码编码译码推演仿真(P124302169石雨婷)
  • 立创EDA边框层绘制避坑指南:解决3类Gerber导出“边框未闭合”错误
  • 8G显存本地部署:AI漫剧生成工具全流程自动化实践指南