尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

基于HarmonyOS的情侣美食管理应用开发实战(三)- 美食相册与设置功能

基于HarmonyOS的情侣美食管理应用开发实战(三)- 美食相册与设置功能
📅 发布时间:2026/7/8 2:25:08

基于HarmonyOS的情侣美食管理应用开发实战(三)- 美食相册与设置功能

📖 系列文章目录

  • (一)项目设计与角色管理
  • (二)菜谱管理与订单系统
  • (三)美食相册与设置功能(本文)
  • (四)数据库优化与问题解决

一、美食相册功能实现

1.1 功能概述

美食相册用于记录情侣一起品尝美食的美好时光:

  • 上传美食照片
  • 添加照片描述
  • 浏览相册
  • 删除照片

1.2 相册页面

1.2.1 页面结构
@Entry@Componentstruct GalleryPage{@StateimageList:GalleryImage[]=[]@StateisRefreshing:boolean=false@StategridView:boolean=true// true-网格视图 false-列表视图aboutToAppear(){this.loadImages()}asyncloadImages(){constpredicates=newrelationalStore.RdbPredicates('gallery_img')predicates.orderByDesc('create_time')constresultSet=awaitRdbUtil.query(predicates)this.imageList=[]while(resultSet.goToNextRow()){constimage:GalleryImage={id:resultSet.getLong(resultSet.getColumnIndex('id')),image:resultSet.getString(resultSet.getColumnIndex('image')),description:resultSet.getString(resultSet.getColumnIndex('description')),create_time:resultSet.getLong(resultSet.getColumnIndex('create_time'))}this.imageList.push(image)}resultSet.close()}build(){Column(){// 顶部工具栏Row(){Text('美食相册').fontSize(20).fontWeight(FontWeight.Bold)Blank()// 视图切换Toggle({type:ToggleType.Switch,isOn:$$this.gridView})// 上传按钮Button('+').onClick(()=>{router.pushUrl({url:'pages/GalleryAddPage'})})}.width('100%').padding(16)// 图片展示if(this.gridView){this.GridView()}else{this.ListView()}}}}
1.2.2 网格视图与列表视图
@BuilderGridView(){Grid(){ForEach(this.imageList,(item:GalleryImage)=>{GridItem(){Image(item.image).width('100%').height('100%').objectFit(ImageFit.Cover).onClick(()=>{router.pushUrl({url:'pages/GalleryDetailPage',params:{imageId:item.id}})})}})}.columnsTemplate('1fr 1fr 1fr').rowsGap(4).columnsGap(4)}@BuilderListView(){List(){ForEach(this.imageList,(item:GalleryImage)=>{ListItem(){Column(){Image(item.image).width('100%').height(200).objectFit(ImageFit.Cover)if(item.description){Text(item.description).fontSize(14).margin({top:8})}Text(this.formatTime(item.create_time)).fontSize(12).fontColor('#999999')}.backgroundColor('#FFFFFF').borderRadius(8).margin({bottom:12})}})}}

二、设置功能实现

2.1 功能概述

设置页面提供:

  • 查看个人信息
  • 修改昵称
  • 切换角色
  • 清除数据

2.2 设置页面

2.2.1 页面结构
@Entry@Componentstruct SettingsPage{@StatecoupleConfig:CoupleConfig|null=null@StatecurrentRole:string=''asyncaboutToAppear(){awaitthis.loadConfig()this.currentRole=awaitPreferencesUtil.get('current_role','')}// 修改昵称asyncupdateName(role:'chef'|'diner',newName:string){constvalues:relationalStore.ValuesBucket={}if(role==='chef'){values.chef_name=newName.trim()}else{values.diner_name=newName.trim()}constpredicates=newrelationalStore.RdbPredicates('couple_config')predicates.equalTo('id',this.coupleConfig.id)awaitRdbUtil.update('couple_config',values,predicates)prompt.showToast({message:'修改成功'})}// 切换角色asyncswitchRole(){constnewRole=this.currentRole==='chef'?'diner':'chef'awaitPreferencesUtil.put('current_role',newRole)consttargetPage=newRole==='chef'?'pages/ChefHomePage':'pages/DinerHomePage'router.replaceUrl({url:targetPage})}// 清除所有数据asyncclearAllData(){AlertDialog.show({title:'确认清除',message:'清除后所有数据将无法恢复',primaryButton:{value:'取消',action:()=>{}},secondaryButton:{value:'清除',fontColor:Color.Red,action:async()=>{awaitRdbUtil.executeSql('DELETE FROM recipe')awaitRdbUtil.executeSql('DELETE FROM order_record')awaitRdbUtil.executeSql('DELETE FROM gallery_img')awaitRdbUtil.executeSql('DELETE FROM couple_config')awaitPreferencesUtil.clear()router.replaceUrl({url:'pages/RoleSelectPage'})}}})}}

三、关键技术点

3.1 图片展示优化

使用 Grid 组件实现相册网格布局:

Grid(){ForEach(this.imageList,(item:GalleryImage)=>{GridItem(){Image(item.image).objectFit(ImageFit.Cover)}})}.columnsTemplate('1fr 1fr 1fr')// 三列布局

3.2 对话框交互

确认对话框:

AlertDialog.show({title:'确认操作',message:'确定要执行此操作吗?',primaryButton:{value:'取消',action:()=>{}},secondaryButton:{value:'确定',fontColor:Color.Red,action:()=>{// 执行操作}}})

3.3 时间格式化

formatTime(timestamp:number):string{constdiff=Date.now()-timestampif(diff<60000){return'刚刚'}elseif(diff<3600000){return`${Math.floor(diff/60000)}分钟前`}elseif(diff<86400000){return`${Math.floor(diff/3600000)}小时前`}else{constdate=newDate(timestamp)return`${date.getMonth()+1}月${date.getDate()}日`}}

四、总结

本篇文章介绍了美食相册和设置功能的实现,包括:

  1. 美食相册:照片上传、网格/列表切换、大图查看
  2. 设置功能:信息修改、角色切换、数据清除
  3. 技术要点:Grid布局、对话框交互、时间格式化

下一篇文章将总结开发过程中遇到的问题和解决方案。


相关新闻

  • 设备机箱定制厂家如何提升客户满意度
  • 固态硬盘台式怎么安装在笔记本身上?
  • 【单片机毕业设计】基于 STM32 单片机与 NRF24L01 的四路无线继电器控制系统设计,基于 51 单片机与 NRF24L01 的无线多路开关控制装置设计(020701)

最新新闻

  • 多智能体动态加入与非均匀缩放控制实战指南
  • 避坑指南⚠️ 自动售货机运营新手最容易犯的5个错误~YH
  • 5步精通猫抓cat-catch:浏览器资源嗅探扩展的高级配置与实战指南
  • 2026小程序模板平台哪个好
  • OpenCV 4.x 图像预处理实战:3步完成300x300尺寸转换与L1距离评估
  • 一、背景:这不是“电脑坏了”,是“运输后遗症” 你在实体店看着师傅装好机,跑分、游戏全过,高高兴兴抱回家。插电、按开关——屏幕黑的,风扇不转,一点动静没有。第一反应:被坑了?电脑坏了? 别急。这种情

日新闻

  • PROPKA 3深度解析:蛋白质pKa预测的实战指南与算法原理
  • 微信小程序 globalData 监听:基于 Object.defineProperty 的 3 种实现方案对比
  • MySQL 8.0 数据清洗实战:3类异常值识别与 UPDATE/DELETE 批量处理

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号