【HarmonyOS 5.0.0 或以上】构建空状态组件 EmptyView:多类型图文占位 + 一键刷新入口

🎯 目标

在加载失败、数据为空、权限限制等场景下,用统一风格的空状态组件 EmptyView 提升用户体验。
本组件具备以下能力:

  • 支持多种状态类型:空数据、加载失败、无权限、无网络

  • 图文可自定义

  • 可配置操作按钮(如“刷新”、“去设置”、“重新登录”等)

  • 默认样式统一、适配主流页面空态需求


🧱 状态类型定义

状态类型标识值(type)默认图默认文字默认按钮
无数据'empty'📦暂无内容'刷新'
加载失败'error'加载失败,请重试'重试'
无网络'network'📡网络异常,请检查连接'设置网络'
无权限'forbidden'🚫当前无访问权限'重新登录'

🧰 组件实现:EmptyView.ets

@Component
export struct EmptyView {
  @Prop type: 'empty' | 'error' | 'network' | 'forbidden' = 'empty'
  @Prop image: ResourceStr | null = null
  @Prop text: string | null = null
  @Prop buttonText: string | null = null
  @Prop onAction: () => void = () => {}

  build() {
    const config = {
      empty: {
        image: $r('app.media.icon_empty'),
        text: '暂无数据',
        button: '刷新'
      },
      error: {
        image: $r('app.media.icon_error'),
        text: '加载失败,请稍后重试',
        button: '重试'
      },
      network: {
        image: $r('app.media.icon_network'),
        text: '网络异常,请检查设置',
        button: '设置网络'
      },
      forbidden: {
        image: $r('app.media.icon_forbidden'),
        text: '当前无权限访问',
        button: '重新登录'
      }
    }

    const cur = config[this.type]

    Column({ space: 12 }) {
      Image(this.image ?? cur.image).width(120).height(120)

      Text(this.text ?? cur.text)
        .fontSize(14)
        .fontColor('#888')

      Button(this.buttonText ?? cur.button)
        .type(ButtonType.Normal)
        .onClick(() => this.onAction())
    }
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
    .height('100%')
  }
}

📦 使用示例

@Entry
@Component
struct DemoEmpty {
  @State status: 'empty' | 'error' | 'network' | 'forbidden' = 'empty'

  build() {
    EmptyView({
      type: this.status,
      onAction: () => {
        console.info('执行刷新或跳转操作')
        this.status = 'empty'
      }
    })
  }
}

✨ 可扩展能力建议

功能说明
自定义插槽支持插入图片/按钮/描述内容
动画支持图标可替换为 Lottie/VAP 动画
状态复用封装空态类型与错误码自动绑定
联动接口状态配合接口封装中自动切换空态/失败图

📘 下一篇预告

第6篇:【HarmonyOS 5.0.0 或以上】构建分页加载组件 PageWrapper:集成刷新 / 空态 / 加载中一体封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值