HarmonyOS ArkTS 实战实现一个购物清单与价格比较应用项目效果你是否经历过“进了超市就失忆”——总是忘记比较价格、漏买或超支 本文手把手带你用 HarmonyOS ArkTS 实现一个功能完善的购物清单与价格比较应用。它会帮你记录、比价、分类管理并且用清爽的橙色购物主题优化交互体验。项目使用 DevEco Studio 开发适配 API 24 及以上版本。运行效果功能介绍实际场景你可以把这篇教程用在“家庭每周采购”“合租室友拼单”甚至是“市场调研比价”。 下面这些功能都已经在代码里直接可跑✅ 购物商品添加✅ 商品勾选已购买✅ 价格记录✅ 总价计算✅ 商品分类✅ 数量调整✅ 价格比较✅ 购物历史✅ 常用商品收藏✅ 预算设置✅ 超支提醒✅ 清单分享✅ 超市选择✅ 优惠券记录✅ 购物统计- ✅ 购物商品添加✅ 商品勾选已购买✅ 价格记录✅ 总价计算✅ 商品分类✅ 数量调整✅ 价格比较✅ 购物历史✅ 常用商品收藏✅ 预算设置✅ 超支提醒✅ 清单分享✅ 超市选择✅ 优惠券记录✅ 购物统计定义数据结构interfaceShoppingItem{id:number;name:string;price:number;quantity:number;category:string;isBought:boolean;note:string;}初始化页面状态Stateprivateitems:ShoppingItem[][{id:1,name:牛奶,price:12.5,quantity:2,category:饮品,isBought:true,note:纯牛奶},{id:2,name:面包,price:8,quantity:1,category:食品,isBought:false,note:},{id:3,name:苹果,price:15,quantity:3,category:水果,isBought:false,note:红富士},];StateprivatenewItemName:string;核心功能方法// 添加新商品privateaddItem():void{if(!this.newItemName.trim())returnthis.items[...this.items,{id:Date.now(),name:this.newItemName.trim(),price:0,quantity:1,category:未分类,isBought:false,note:}]this.newItemName}// 切换已购状态privatetoggleComplete(id:number):void{this.itemsthis.items.map(ii.idid?{...i,isBought:!i.isBought}:i)}// 删除商品privatedeleteItem(id:number):void{this.itemsthis.items.filter(ii.id!id)}// 更新商品数量privateupdateQuantity(id:number,quantity:number):void{if(quantity1)returnthis.itemsthis.items.map(ii.idid?{...i,quantity}:i)}// 计算总价已购商品privategetTotalPrice():string{returnthis.items.filter(ii.isBought).reduce((sum,i)sumi.price*i.quantity,0).toFixed(2)}Builder 可复用组件BuilderItemCard(item:any){Row().width(100%).padding(14).backgroundColor(Color.White).borderRadius(12)}完整build()页面布局build(){Stack({alignContent:Alignment.Bottom}){Column(){Row(){Text(购物清单).fontSize(24).fontWeight(FontWeight.Bold).fontColor(#1F2937)Blank()Text(总计: ¥${this.items.filter(ii.isBought).reduce((sum,i)sumi.price*i.quantity,0).toFixed(2)}).fontSize(16).fontColor(#C2410C).fontWeight(FontWeight.Medium)}.width(100%).padding(20)Scroll(){Column({space:10}){ForEach(this.items,(item:ShoppingItem){Row({space:12}){Text(item.isBought?✅:⬜).fontSize(20).onClick((){this.itemsthis.items.map(ii.iditem.id?{...i,isBought:!i.isBought}:i)})Column({space:4}){Text(item.name).fontSize(15).fontColor(item.isBought?#9CA3AF:#1F2937).decoration({type:item.isBought?TextDecorationType.LineThrough:TextDecorationType.None})Text(x${item.quantity}·${item.category}).fontSize(12).fontColor(#9CA3AF)}.alignItems(HorizontalAlign.Start).layoutWeight(1)Text(¥${(item.price*item.quantity).toFixed(2)}).fontSize(15).fontColor(#C2410C).fontWeight(FontWeight.Medium)}.width(100%).padding(14).backgroundColor(Color.White).borderRadius(12)})}.width(100%).padding({left:20,right:20,bottom:100})}.layoutWeight(1).scrollBar(BarState.Off)}.width(100%).height(100%).backgroundColor(#FFF7ED)Row({space:10}){TextInput({placeholder:添加商品}).layoutWeight(1).height(48).backgroundColor(Color.White).borderRadius(24)Button().width(48).height(48).backgroundColor(#C2410C).borderRadius(24)}.width(90%).margin({bottom:20})}.width(100%).height(100%)}页面设计说明为了营造“橙色购物”的轻快氛围整个应用以#C2410C为主色调并渐变到#FB923C背景使用极浅的暖色#FFF7ED来降低视觉疲劳。 卡片式设计配合圆角和阴影让每个商品看起来就像一张便利贴——已完成的任务会划掉并变灰未完成的任务会醒目地显示价格和数量。SDK配置API 24compatibleSdkVersion: “6.1.1(24)”运行项目将代码复制到 entry/src/main/ets/pages/Index.ets 即可运行。项目总结本项目从零到一实现了购物清单与价格比较的完整功能覆盖数据结构、状态管理、UI 布局和可复用组件。 你学到了什么ArkTS 声明式 UI 与State状态驱动ForEach动态列表与交互事件处理购物车逻辑、价格计算、勾选状态、清单管理Builder自定义可复用组件的拆分方式 下一步可以做什么条码扫描结合相机和 ML Kit 实现扫码录入价格历史用 RelationalStore 记录每次采购价格多平台比价对接公开价格 API展示不同超市的价格差异优惠券提醒根据商品自动提醒可用优惠券拼单与 AA 记账多人协同编辑清单并自动分账希望这篇文章能帮你用 HarmonyOS 写出真正能帮自己和家人省钱省心的好工具 ✨
企业数字化 ERP 产品动态
相关推荐
UE5集成DLSS 3.0全攻略:解锁帧率上限,实现画质与性能兼得 1. 项目概述:当UE5遇见DLSS 3.0,一场渲染效率的革命如果你是一名UE5开发者,或者正在用UE5捣鼓自己的独立游戏、数字孪生项目,那你肯定对“帧率”这个词又爱又恨。爱的是,流畅的画面是沉浸感的基石;恨的是&a… · 2026/9/26 5:23:11
SSH密钥生成与管理全攻略:从原理到实战避坑指南 1. 项目概述:为什么SSH密钥生成值得你花时间研究?如果你用过SSH连接服务器、Git推送代码,或者配置过VSCode Remote SSH,那你大概率已经和SSH密钥打过交道了。表面上看,ssh-keygen -t rsa这条命令简单得不能再简单&… · 2026/9/24 17:59:17
智能优化算法提升SVM工业故障诊断准确率 1. 项目背景与核心价值 在工业设备故障诊断领域,支持向量机(SVM)因其出色的分类性能被广泛应用。但传统SVM存在两个关键痛点:一是核函数参数和惩罚因子需要人工经验设置,二是单一算法优化容易陷入局部最优。这个项目通过集成12种智能优化算法… · 2026/9/26 2:11:41
软控与设计工具完整盘点:从嵌入式UI到NFC天线设计 把“软控”和“设计工具”放到同一张工作台上,乍看有点混搭。软控对应设备里的逻辑和状态,设计工具对应外观、交互和硬件结构,但它们实际是一枚硬币的两面:任何产品想落地,都逃不开“程序怎么控制”和“界面怎么呈现”… · 2026/9/26 5:24:04
EPLAN端子图表全攻略:从生成配置到模板设计,彻底告别手绘接线图 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 5:24:04
treg:轻量级生成式AI终端路由工具解析 1. 项目概述:treg 不是 typo,而是一个被严重误读的 CLI 工具代号“treg”这个标题乍看像拼写错误——毕竟在 OpenRouter、Codex CLI、Claude CLI 这些高频热词包围下,它既不像模型名(如 qwen、claude),也不… · 2026/9/26 5:24:04
商用自助设备通用解决方案:软硬一体架构与远程运维实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 5:24:04
代驾平台源码二次开发:从订单状态机到支付回调的实战解析 简介:一套可直接落地的代驾平台源码包,将微信小程序端与后端服务整合在同一工程中,适合有小程序开发或Java后端基础的学习者用于项目实战、二次开发或快速部署上线。压缩包内共2000个文件,以JavaScript、Vue、TypeScript构建前端逻… · 2026/9/26 5:23:58
揭秘Universal Token架构:GR00T-WholeBodyControl如何用单解码器统一4种运动输入 揭秘Universal Token架构:GR00T-WholeBodyControl如何用单解码器统一4种运动输入 【免费下载链接】GR00T-WholeBodyControl Welcome to GR00T Whole-Body Control (WBC)! This is a unified platform for developing and deploying advanced humanoid controllers. … · 2026/9/26 5:23:58
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46