HarmonyOS NEXT 实战系列03-案例粉丝列表

举报
yd_234838830 发表于 2025/03/26 14:09:58 2025/03/26
【摘要】 这个案例当中涉及到知识内容:对象类型使用 Interface 约束华为内容的资源类型 Resource定义数组类型的数据 FansItem[]使用 ForEach 完成循环渲染使用 @Extend 扩展组件属性方法具体代码如下:interface FansItem { avatar: Resource name: string title: string isFollow: bool...

image.png

这个案例当中涉及到知识内容:

  1. 对象类型使用 Interface 约束

  2. 华为内容的资源类型 Resource

  3. 定义数组类型的数据 FansItem[]

  4. 使用 ForEach 完成循环渲染

  5. 使用 @Extend 扩展组件属性方法

具体代码如下:

interface FansItem {
  avatar: Resource
  name: string
  title: string
  isFollow: boolean
}

@Entry
@Component
struct TestPage {
  playerList: FansItem[] = [
    {
      name: '华为终端',
      avatar: $r('app.media.flower'),
      title: '2024,二百万粉阿华继续冲压!!!',
      isFollow: false
    },
    {
      name: '黑马程序员',
      avatar: $r('app.media.flower'),
      title: '领取课程源码+资料,关注黑马程序员公众,回复:领取资源02',
      isFollow: true
    },
    {
      name: '央视新闻',
      avatar: $r('app.media.flower'),
      title: '中央广播电视总台央视新闻官方账号',
      isFollow: false
    },
  ]

  build() {
    List() {
      ForEach(this.playerList, (item: FansItem) => {
        ListItem() {
          Row({ space: 15 }) {
            Image($r('app.media.flower'))
              .width(48)
              .aspectRatio(1)
              .borderRadius(24)
            Column() {
              Text(item.name)
              Text(item.title)
                .fontColor('#999999')
                .maxLines(1)
                .textOverflow({ overflow: TextOverflow.Ellipsis })
            }
            .layoutWeight(1)
            .alignItems(HorizontalAlign.Start)

            if (item.isFollow) {
              Button('已关注')
                .customButton()
                .backgroundColor('#acacac')
            } else {
              Button('回关')
                .customButton()
                .backgroundColor('#ffaa00')
            }
          }
          .width('100%')
          .height(80)
        }
      })
    }
    .padding(15)
    .width('100%')
    .height('100%')
    .margin({ top: 50 })
  }
}

@Extend(Button)
function customButton() {
  .fontSize(12)
  .padding(0)
  .size({ width: 60, height: 30 })
}

这个界面不涉及到动态交互,下一篇我们将会涉及到

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。