Dialog封装报错Error name:TypeError Error message:is not callable

报错

Error name:TypeError Error message:is not callable Stacktrace: at PUV2ViewBase (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:4029:1) at ViewPU (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6213:1) at WheelPickerDialog (entry/src/main/ets/common/widgets/dialog/WheelPickerDialog.ets:8:1) at showUniversalDialog (entry/src/main/ets/common/utils/WheelPickerUtils.ets:13:20) at showSocPicker (entry/src/main/ets/common/utils/WheelPickerUtils.ets:107:22) at showSocPicker (entry/src/main/ets/pages/car/OutDisChargeElePage.ets:564:22) at anonymous (entry/src/main/ets/pages/car/OutDisChargeElePage.ets:242:18) at anonymous (entry/src/main/ets/pages/car/OutDisChargeElePage.ets:367:9)

/**
   * 显示通用选择器
   * @param options 配置选项
   */
  static showUniversalDialog(options: WheelPickerOptions) {
    const dialog = new WheelPickerDialog({
      title: options.title || '选择',
      positiveText: options.positiveText || '确认',
      negativeText: options.negativeText || '取消',
      showPositive: options.showPositive ?? true,
      showNegative: options.showNegative ?? true,
      pickerConfigs: options.columns,
      onConfirmCallback: (...values: string[]) => {
        if (options.onConfirm) {
          options.onConfirm(...values)
        }
      },
      onCancelCallback: () => {
        if (options.onCancel) {
          options.onCancel()
        }
      }
    })

    const controller = new CustomDialogController({
      builder: dialog,
      autoCancel: true,
      alignment: DialogAlignment.Bottom,
      offset: { dx: 0, dy: 0 },
      customStyle: true,
      gridCount: 4
    })

    dialog.controller = controller
    controller.open()
  }

一调用这个方法就崩溃,这个问题的根本原因是不能在工具类中弹dialog导致的,代码放到page页面中就没问题了,在 Page 中创建 Controller:CustomDialogController 必须在 Page 组件中创建和打开

另外目前测试页面的弹窗不能这样单独创建dialog:

image.png

必须要放到方法builder里面创建:

image.png

否则就会崩溃。

image.png

工具类中这样写弹窗也弹不出来,所以弹窗不要封装工具类,直接在页面创建,这两天算是好好踩踩坑,摸索一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容