我们继续《HarmonyOS 5.0.0 或以上实战内容》系列——

 


🧩 Step 1:封装 Toast 组件 GlobalToast.ets

// components/GlobalToast.ets
@Component
export struct GlobalToast {
  @State visible: boolean = false;
  @State message: string = '';

  show(msg: string) {
    this.message = msg;
    this.visible = true;

    setTimeout(() => {
      this.visible = false;
    }, 2000); // 自动2秒后消失
  }

  build() {
    if (!this.visible) return;

    Column() {
      Text(this.message)
        .fontSize(16)
        .padding({ top: 10, bottom: 10, left: 20, right: 20 })
        .backgroundColor('#000000AA')
        .fontColor('#FFFFFF')
        .borderRadius(20)
    }
    .align(Alignment.Center)
    .position({ x: '50%', y: '85%' })
    .translate({ x: -0.5, y: 0 }, Percent)
  }
}

🧩 Step 2:构建 Toast 管理器 toastManager.ts

// common/toastManager.ts
import GlobalToast from '../components/GlobalToast';

let toastRef: GlobalToast | null = null;

export function registerToast(ref: GlobalToast) {
  toastRef = ref;
}

export function showToast(msg: string) {
  toastRef?.show(msg);
}

🧩 Step 3:在首页挂载 Toast 并注册

// pages/home/home.ets
import { registerToast, showToast } from '../../common/toastManager';
import GlobalToast from '../../components/GlobalToast';

@Entry
@Component
struct HomePage {
  @State toastInstance: GlobalToast = new GlobalToast();

  aboutToAppear() {
    registerToast(this.toastInstance);
  }

  build() {
    Column() {
      Button("显示 Toast").onClick(() => {
        showToast("操作成功!");
      })

      this.toastInstance.build()
    }
  }
}

✅ 效果预览

点击按钮后,全局统一风格的 Toast 从底部浮现,2 秒后自动消失。


⚠️ 易错点总结

问题 说明
未注册 toastRef showToast 无法调用 Toast
Toast 未渲染到页面中 build() 未插入页面,UI 不显示
多页面场景 只在首页注册时,全局才有效,建议注册在根页面或 App Shell 中

🧠 拓展建议

  • 增加 toast 类型:success/warning/error;

  • 支持不同位置展示(顶部、中部、底部);

  • 自定义停留时间和样式统一入口。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐