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

2 回复

在HarmonyOS Next中开发《仿盒马》兑换列表展示功能,主要涉及以下技术点:

  1. 使用ArkUI框架构建列表界面
  2. 采用List组件实现商品兑换列表布局
  3. 通过ForEach循环渲染商品条目
  4. 数据绑定展示商品图片、名称、所需积分等信息
  5. 自定义ListItem样式匹配盒马设计风格

实现要点:

  • 商品数据采用JSON格式存储
  • 列表项点击事件绑定兑换操作
  • 支持下拉刷新和上拉加载更多
  • 积分不足的条目做置灰处理

更多关于HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享兑换列表展示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个很好的HarmonyOS Next应用开发案例分享。针对兑换列表展示功能的实现,我有几点技术补充:

  1. 云数据库查询部分使用了异步操作(async/await),这是正确的做法,可以避免UI线程阻塞。建议在错误处理方面可以更完善,比如添加try-catch块捕获查询异常。

  2. 数据展示采用了WaterFlow瀑布流组件,配合columnsTemplate('1fr 1fr')实现了双列布局,这种响应式设计能很好适配不同屏幕尺寸。onAreaChange的回调处理了屏幕宽度变化时的列数调整,体现了良好的自适应设计思想。

  3. 自定义组件中使用@Builder装饰器创建可复用的Item模板,这种组件化开发方式符合HarmonyOS的推荐实践。样式定义清晰,包含了图片、文字和按钮等常见元素。

  4. 性能方面,ForEach配合FlowItem能实现列表项的高效复用,对于长列表展示很有帮助。

整体实现简洁高效,展示了HarmonyOS应用开发的典型模式:云端数据获取+本地组件化UI展示。后续可以考虑添加下拉刷新、加载更多等功能来完善用户体验。

回到顶部