HarmonyOS鸿蒙Next中并发接口拦截器中如何实现全局弹窗获取到升级地址并跳转到应用商店

HarmonyOS鸿蒙Next中并发接口拦截器中如何实现全局弹窗获取到升级地址并跳转到应用商店

【问题现象】

在应用中,每个接口都可能返回升级的响应码code,需要在接口拦截器中实现一个全局弹窗。由于接口是并发的,弹窗只能弹出一次。那么如何实现这个全局弹窗,并获取升级地址跳转到应用商店呢?此外,由于弹窗可能会在多个页面弹出(如启动页、登录页、主页等),这些页面可能会被销毁,这会导致弹窗无法正常显示。

【背景知识】

[@StorageLink AppStorage中key对应的属性建立双向数据同步](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-appstorage#storagelink)

【定位思路】

在并发接口拦截器中,弹窗弹出位置不确定且仅弹出一次,因此需要维护一个全局变量来保证弹窗的弹出状态。可以在AppStorage中定义弹窗弹出状态,并通过@StorageLink来获取弹窗是否曾弹出。

【解决方案】

使用@StorageLink维护一个全局变量确保弹窗仅弹出一次

// 1.封装1个弹框实例类CustomDialogLayou.ets
@CustomDialog
export struct CustomDialogLayout {
  controller?: CustomDialogController

  build() {
    Column() {
      Text('Global Custom Dialog Test')
    }
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
    .height(400)
  }
}
// 2.在window的入口page(比如Index.ets)里import并创建实例import { CustomDialogLayout } from './CustomDialogLayout'
dialogController: CustomDialogController | null = new CustomDialogController({
  builder: CustomDialogLayout({
  }),
  cancel: this.onCancel,
  autoCancel: true,
  alignment: DialogAlignment.Center,
})
// 3.在MainAbility.ts的onCreate方法里通过AppStorage定义关于弹框显示的全局属性,默认false不显示
AppStorage.setOrCreate('showGlobalCustomDialog', false)
// 4.在Index.ets里监听此属性值改变并进行拉起动作
[@StorageLink](/user/StorageLink)('showGlobalCustomDialog') @Watch('globalCustomDialogStateChange') showGlobalCustomDialog: boolean = false

globalCustomDialogStateChange() {
  if (this.showGlobalCustomDialog) {
    if (this.dialogController != null) {
      this.dialogController.open()
      AppStorage.setOrCreate('showGlobalCustomDialog', false)
    }
  }
}
// 5.在需要调用的页面设置全局属性为true即可调起弹框
AppStorage.setOrCreate('showGlobalCustomDialog', true)

点击放大

点击放大

点击放大

【总结】

在并发场景下,为了实现条件判断和控制弹窗弹出的行为,可以通过在AppStorage中维护一个全局变量,并使用@StorageLink进行同步监听。这种方法既能保证弹窗只弹出一次,从而避免重复弹出问题。


更多关于HarmonyOS鸿蒙Next中并发接口拦截器中如何实现全局弹窗获取到升级地址并跳转到应用商店的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中并发接口拦截器中如何实现全局弹窗获取到升级地址并跳转到应用商店的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,通过并发接口拦截器实现全局弹窗并跳转到应用商店的步骤如下:

  1. 封装一个弹窗实例类CustomDialogLayout.ets,使用@CustomDialog注解定义弹窗结构。
  2. 在入口页面(如Index.ets)中导入并创建弹窗实例,使用CustomDialogController控制弹窗显示。
  3. MainAbility.tsonCreate方法中,通过AppStorage定义全局属性showGlobalCustomDialog,默认值为false
  4. Index.ets中使用@StorageLink监听showGlobalCustomDialog属性变化,当属性为true时,调用dialogController.open()显示弹窗,并将属性重置为false
  5. 在需要调用弹窗的页面中,通过AppStorage.setOrCreate('showGlobalCustomDialog', true)设置全局属性为true,触发弹窗显示。

通过AppStorage维护全局变量,确保弹窗在并发场景下仅弹出一次。

回到顶部