最近在尝试用ArkUI方舟开发框架为HarmonyOS NEXT开发一个简单的演唱会票务应用页面。作为刚接触鸿蒙生态的开发者,记录一些基础但实用的实现过程。

UI布局与数据绑定
采用ArkTS的声明式语法构建票务卡片列表。通过List组件实现纵向滚动布局,每个票务项用Column嵌套Row实现图文混排。数据层使用@State装饰器管理状态,当票务库存变化时自动触发UI更新:

typescript

// 票务数据类型
interface TicketItem {
  id: number
  title: string
  artist: string
  date: string
  price: number
  stock: number
  cover: Resource
}

@Entry
@Component
struct TicketPage {
  @State ticketList: TicketItem[] = [
    {
      id: 1,
      title: '2024夏季演唱会',
      artist: '星空乐队',
      date: '2024-08-20',
      price: 380,
      stock: 15,
      cover: $r('app.media.concert1')
    }
    // 更多数据...
  ]

  build() {
    List({ space: 12 }) {
      ForEach(this.ticketList, (item: TicketItem) => {
        ListItem() {
          TicketCard({ item: item })
        }
      })
    }
    .padding(12)
  }
}

// 票务卡片组件
@Component
struct TicketCard {
  @Prop item: TicketItem

  build() {
    Row() {
      Image(this.item.cover)
        .width(120)
        .aspectRatio(1)
      
      Column() {
        Text(this.item.title)
          .fontSize(18)
          .fontWeight(FontWeight.Bold)
        Text(`艺人:${this.item.artist}`)
          .fontColor('#666')
        Text(`日期:${this.item.date}`)
        Row() {
          Text(`¥${this.item.price}`)
            .fontColor('#f53')
          Text(`剩余 ${this.item.stock}张`)
            .margin({ left: 20 })
        }
      }
      .padding(10)
    }
    .borderRadius(8)
    .backgroundColor('#fff')
  }
}

关键点说明
使用ForEach动态渲染列表数据,避免手动创建重复UI
组件化设计将TicketCard抽离为独立组件,便于复用
通过@State和@Prop装饰器实现父子组件数据通信

在HarmonyOS NEXT上测试时,ArkUI的声明式开发确实能减少样板代码。不过在实际项目中还需要考虑网络请求、本地缓存等功能的接入,后续再继续尝试。
(注:示例代码基于HarmonyOS SDK API12编写,实际开发需参考最新官方文档调整)


chengxujianke
1 声望0 粉丝