HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享兑换列表展示
HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享兑换列表展示
技术栈
Appgallery connect
开发准备
上一节我们创建了积分相关的商品表,我们现在可以针对积分进行更多的操作了,我们首先添加了对应的数据到我们的云数据库中,这一节我们就要把我们存储的数据查询出来展示给用户
功能分析
首先我们需要在进入页面后进行数据查询,数据查出后我们定义对应的集合,然后我们新建一个瀑布流组件,把数据传递进去,进行数据的展示,在引用组件的地方我们传递数据
代码实现
我们首先在进入页面后查询数据
@State listProduct:PointsProduct[]=[]
async aboutToAppear(): Promise<void> {
let databaseZone = cloudDatabase.zone('default');
let condition = new cloudDatabase.DatabaseQuery(points_product);
let listData = await databaseZone.query(condition);
let json = JSON.stringify(listData)
let data: PointsProduct[] = JSON.parse(json)
this.listProduct = data
hilog.error(0x0000, 'testTag', `Failed to query data, code: ${data}`);
}
然后我们新建一个自定义组件,先定义好一条数据的样式
@Builder
Item(item:PointsProduct){
Column () {
Image(item.url)
.width('100%')
.aspectRatio(1)
.objectFit(ImageFit.Cover)
.borderRadius({topLeft:10,topRight:10})
Column () {
Text(item.name)
.fontSize(16)
.fontColor('#333')
.margin({ bottom: 4 })
Text(item.text_message)
.fontSize(12)
.fontColor('#666')
.margin({ bottom: 8 })
}
Row () {
Text(){
Span("$")
.fontColor(Color.Red)
.fontSize(14)
Span(String(item.points))
.fontSize(16)
.fontColor(Color.Red)
}
Blank()
Column () {
Image($r('app.media.cart'))
.width(20)
.height(20)
}
.justifyContent(FlexAlign.Center)
.width(36)
.height(36)
.backgroundColor("#ff2bd2fa")
.borderRadius(18)
}
.margin({top:10})
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
}
.alignItems(HorizontalAlign.Start)
.padding(12)
}
然后我们创建对应的布局,引入item
build() {
WaterFlow () {
ForEach(this.goodsList, (item:PointsProduct, index) => {
FlowItem () {
this.Item(item)
}
.margin({ bottom: 12 })
})
}
.padding(10)
.columnsTemplate('1fr 1fr')
.columnsGap(12)
.onAreaChange((oldVal, newVal) => {
this.columns = newVal.width > 600 ? 2 : 1
})
}
实现之后我们引入组件
@State listProduct:PointsProduct[]=[]
build() {
Column () {
CommonTopBar({ title: "积分兑换", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})
ProductItem({goodsList:this.listProduct})
}
.backgroundColor(Color.White)
.height('100%')
.width('100%')
}
到这里我们就实现了兑换列表的展示
更多关于HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享兑换列表展示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中开发《仿盒马》兑换列表展示功能,主要涉及以下技术点:
- 使用ArkUI框架构建列表界面
- 采用List组件实现商品兑换列表布局
- 通过ForEach循环渲染商品条目
- 数据绑定展示商品图片、名称、所需积分等信息
- 自定义ListItem样式匹配盒马设计风格
实现要点:
- 商品数据采用JSON格式存储
- 列表项点击事件绑定兑换操作
- 支持下拉刷新和上拉加载更多
- 积分不足的条目做置灰处理
更多关于HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享兑换列表展示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个很好的HarmonyOS Next应用开发案例分享。针对兑换列表展示功能的实现,我有几点技术补充:
-
云数据库查询部分使用了异步操作(async/await),这是正确的做法,可以避免UI线程阻塞。建议在错误处理方面可以更完善,比如添加try-catch块捕获查询异常。
-
数据展示采用了WaterFlow瀑布流组件,配合
columnsTemplate('1fr 1fr')
实现了双列布局,这种响应式设计能很好适配不同屏幕尺寸。onAreaChange
的回调处理了屏幕宽度变化时的列数调整,体现了良好的自适应设计思想。 -
自定义组件中使用
@Builder
装饰器创建可复用的Item模板,这种组件化开发方式符合HarmonyOS的推荐实践。样式定义清晰,包含了图片、文字和按钮等常见元素。 -
性能方面,
ForEach
配合FlowItem
能实现列表项的高效复用,对于长列表展示很有帮助。
整体实现简洁高效,展示了HarmonyOS应用开发的典型模式:云端数据获取+本地组件化UI展示。后续可以考虑添加下拉刷新、加载更多等功能来完善用户体验。