HarmonyOS 如何实现公共的customdialog

HarmonyOS
2025-01-09 16:15:44
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

1、创建全局变量类

export class GlobalContext {
  private constructor() {
  }

  private static instance: GlobalContext;
  private _objects = new Map<string, Object>();

  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  getObject(value: string): Object | undefined {
    return this._objects.get(value);
  }

  setObject(key: string, objectClass: Object): void {
    this._objects.set(key, objectClass);
  }
}

2、绘制隐私弹窗

@CustomDialog
export default struct CustomDialogComponent {
  controller: CustomDialogController = new CustomDialogController({ 'builder': '' });
  cancel: Function = () => {
  };
  confirm: Function = () => {
  };

  build() {
    Column() {
      Text('欢迎进入此app')
        .width('90%')
        .fontColor('#182431')
        .fontSize('20fp')
        .textAlign(TextAlign.Center)
        .fontWeight(600)
        .margin({
          top: '24vp',
          bottom: '12vp'
        })
      Text('我们充分尊重用户的隐私权,并按照法律要求和业界成熟的安全标准,为您的个人信息提供相应的安全保护措施。')
        .fontSize('18fp')
        .width('90%')
      Text('隐私协议保护声明')
        .width('90%')
        .fontColor("#007DFF")
        .fontSize('18fp')
        .onClick(() => {
          this.controller.close();
          GlobalContext.getContext().setObject('isJumpPrivacy', true);
          router.pushUrl({
            url: 'pages/PrivacyPage'
          }).catch((error: Error) => {
          });
        })
      Text("(以下简称为“本声明”)以便您了解我们如何搜集、使用、披露、保护、存储及传输您的个人数据。请您仔细阅读本声明。如您有任何疑问,请告知我们。")
        .width('90%')
        .fontColor("#182431")
        .fontSize('18fp')
        .opacity(0.6)
        .margin({ bottom: 24 })
      Row() {
        Text('不同意')
          .fancy()
          .onClick(() => {
            this.controller.close();
            this.cancel();
          })
        Blank()
          .backgroundColor("#F5F5F5")
          .width('1vp')
          .height('32vp')
        Text('同意')
          .fancy()
          .onClick(() => {
            this.controller.close();
            this.confirm();
          })
      }
      .margin({ bottom: '3.1%' })
    }
    .width('93.3%')
    .borderRadius(24)
    .backgroundColor(Color.White)
  }
}

@Extend(Text)
function fancy() {
  .fontColor("#007DFF")
  .fontSize("16fp")
  .textAlign(TextAlign.Center)
  .fontWeight(FontWeight.Medium)
  .layoutWeight(1)
}

3、在启动页调用

import CustomDialogComponent, { GlobalContext } from '../view/CustomDialogComponent';
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index1 {
  private context = getContext(this) as common.UIAbilityContext;
  @State message: string = 'Hello World';
  private timerId: number = 0;
  private isJumpToAdvertising: boolean = false;
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogComponent(
      {
        cancel: () => {
          this.onCancel();
        },
        confirm: () => {
          this.onConfirm();
        }
      }),
    alignment: DialogAlignment.Bottom,
    offset: { dx: 0, dy: -24 },
    customStyle: true,
    autoCancel: false
  });

  onCancel() {
    this.context?.terminateSelf();
  }

  onConfirm() {
    this.jumpToAdvertisingPage()
  }

  jumpToAdvertisingPage() {
    this.timerId = setTimeout(() => {
      this.isJumpToAdvertising = true;
    }, 3000);
  }

  onPageShow() {
    if (true) {
      let isJumpPrivacy: boolean = (GlobalContext.getContext().getObject('isJumpPrivacy') as boolean) ?? false;
      if (!isJumpPrivacy) {
        this.dialogController.open();
      }
    } else {
    }
  }

  build() {
  }
}
分享
微博
QQ
微信
回复
2025-01-09 19:16:02
相关问题
公共事件实现跨进程通信
1128浏览 • 1回复 待解决
CustomDialog如何实现半模态详情页效果
1935浏览 • 1回复 待解决
公共样式提取到一个公共文件中
657浏览 • 1回复 待解决
HarmonyOS 公共组件封装
745浏览 • 1回复 待解决
HarmonyOS使用CustomDialog如何设置宽度
642浏览 • 1回复 待解决
HarmonyOS @CustomDialog如何铺满整个屏幕
211浏览 • 1回复 待解决
HarmonyOS 如何把文件存储到公共目录
397浏览 • 1回复 待解决
HarmonyOS CustomDialog显示层级如何控制
225浏览 • 1回复 待解决