HarmonyOS 鸿蒙Next 跳转隐私协议,弹窗不盖住新的页面,回来的时候弹窗还在

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 跳转隐私协议,弹窗不盖住新的页面,回来的时候弹窗还在

跳转隐私协议,弹窗不盖住新的页面,回来的时候弹窗还在

3 回复

参考demo:

 name?: string,
 onPop?: (data: PopInfo) => void
}

// 封装路由工具类,并注册自定义弹窗组件
class AppRouter {
 private static instance = new AppRouter();
 private pathStack: NavPathStack = new NavPathStack();

 public static getInstance(): AppRouter {
   return AppRouter.instance;
 }

 public getPathStack(): NavPathStack {
   return this.pathStack;
 }

 private pushPath(name: string): void {
   this.pathStack.pushPath({ name: name })
 }

 public static push(name: string): void {
   AppRouter.instance.pushPath(name);
 }

 public static openDialog(name: string, params?: RouterParams): void {
   AppRouter.instance.pathStack.pushPath({
     name: name, param: params, onPop: (data: PopInfo) => {
       if (params?.onPop) {
         params.onPop!(data);
       }
     }
   });
 }

 public static pop(): void {
   AppRouter.instance.pathStack.pop();
 }
}
[@Component](/user/Component)
 // NavDestinationMode.DIALOG
struct DefaultDialog {
 build() {
   NavDestination() {
     Stack({ alignContent: Alignment.Center }) {
       Column() {
       }
       .width("100%")
       .height("100%")
       .backgroundColor('rgba(0,0,0,0.5)')
       .transition(
         TransitionEffect.OPACITY.animation({
           duration: 300,
           curve: Curve.Friction
         })
       )
       .onClick(() => {
         AppRouter.pop();
       })

       Column() {
         Text("dialogA")
           .fontColor(Color.White)
         Button("push pageC", { stateEffect: true, type: ButtonType.Capsule })
           .onClick(() => {
             AppRouter.push("pageC")
           })
       }
       .width("50%")
       .height("30%")
       .backgroundColor('#ffae2d2d')
       .transition(
         TransitionEffect.scale({ x: 0, y: 0 }).animation({
           duration: 300,
           curve: Curve.Friction
         })
       )
     }
     .width("100%")
     .height("100%")
   }
   .mode(NavDestinationMode.DIALOG)
   .hideTitleBar(true)
 }
}

[@Component](/user/Component)
struct PageA {
 [@Consume](/user/Consume)('pageInfos') pageInfos: NavPathStack;

 build() {
   NavDestination() {
     Button('push dialogA', { stateEffect: true, type: ButtonType.Capsule })
       .onClick(() => {
         AppRouter.openDialog("DefaultDialog");
       }).margin(10)
   }.title('PageA')}
}

[@Component](/user/Component)
struct PageC {
 [@Consume](/user/Consume)('pageInfos') pageInfos: NavPathStack;

 build() {
   NavDestination() {
     Column() {
       Text('pageC')
         .margin(10)
       Button('返回', { stateEffect: true, type: ButtonType.Capsule })
         .onClick(() => {
           AppRouter.pop();
         }).margin(10)
     }
   }.mode(NavDestinationMode.STANDARD)
 }
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct pageRoot01 {
 [@Provide](/user/Provide)('pageInfos') pageInfos: NavPathStack = new NavPathStack()
 // 显隐控制设置为不占用
 [@State](/user/State) visible: Visibility = Visibility.None

 [@Builder](/user/Builder)
 PagesMap(name: string) {
   if (name == 'pageA') {
     PageA()
   } else if (name == 'pageC') {
     PageC()
   } else if (name == 'DefaultDialog') {
     DefaultDialog()
   }
 }

 build() {
   // 在根页面中注册NavPathStack
   Navigation(AppRouter.getInstance().getPathStack()) {
     Stack({ alignContent: Alignment.Center }) {
       Column() {
         Button('push PageA', { stateEffect: true, type: ButtonType.Capsule })
           .onClick(() => {
             AppRouter.push('pageA')
           })
       }
     }
     .height("100%")
     .width("100%")
   }
   .hideTitleBar(true)
   .navDestination(this.PagesMap)
 }
}
用navigation,不要用dialog

在HarmonyOS鸿蒙Next系统中,实现跳转隐私协议时弹窗不盖住新页面,并在返回时保持弹窗显示,这通常涉及到多任务处理、弹窗层级管理以及页面生命周期管理。以下是一些可能的技术实现思路:

  1. 弹窗层级管理:确保弹窗的层级设置合理,使其不会覆盖新打开的页面。这可以通过调整弹窗的z-index或相应的层级属性来实现。

  2. 页面生命周期监听:在新页面打开和返回时,通过监听页面生命周期事件(如onPageShowonPageHide等),控制弹窗的显示与隐藏。确保在返回时重新显示弹窗。

  3. 多任务与内存管理:确保弹窗在后台不被系统回收。可以通过设置弹窗的持久性属性,或者在返回时重新创建弹窗。

  4. 使用系统API:利用HarmonyOS提供的系统API,如多任务管理、窗口管理等,来精确控制弹窗的行为。

  5. 测试与调试:在不同设备和场景下充分测试,确保弹窗行为符合预期。

请注意,具体实现可能因HarmonyOS版本和具体开发环境而异。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部