HarmonyOS鸿蒙Next中自定义弹窗渲染全局builder报错问题
HarmonyOS鸿蒙Next中自定义弹窗渲染全局builder报错问题
全局builder直接放入promptAction.openCustomDialog会报错“Error message:Cannot read property observeComponentCreation2 of undefined”,如果用wrapBuilder转换后给openCustomDialog会报“is not callable”,报错行都指向builder。
是否有人遇到过相同问题,求教🥺
IDE是目前最新的5.0.5,手机API是5.0.4(16)
源码:https://gitee.com/cangqionghai/global-builder-bug
相关代码:
import { promptAction } from '@kit.ArkUI';
@Entry
@Component
struct Index {
build() {
RelativeContainer() {
Column(){
Row {
Button('全局Builder弹窗')
.onClick(() => {
console.log('GB',GlobalLoadingBuilder.builder)
promptAction.openCustomDialog({builder: ()=>GlobalLoadingBuilder.builder()})
})
Button('普通Builder弹窗')
.onClick(() => {
promptAction.openCustomDialog({builder: ()=>LoadingBuilder()})
})
}
.justifyContent(FlexAlign.SpaceEvenly)
.width('100%')
}
.height('100%')
.justifyContent(FlexAlign.Center)
}
.height('100%')
.width('100%')
}
}
@Builder
function LoadingBuilder() {
Column(){
Text( '加载中...' )
.fontColor('#333')
.fontSize(18)
.margin({top: 20})
}
.justifyContent(FlexAlign.Center)
}
const GlobalLoadingBuilder:WrappedBuilder<[]> = wrapBuilder(LoadingBuilder);
更多关于HarmonyOS鸿蒙Next中自定义弹窗渲染全局builder报错问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这边没有复现问题,能够提供一个完整的问题复现demo吗?
更多关于HarmonyOS鸿蒙Next中自定义弹窗渲染全局builder报错问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题是由于全局Builder在HarmonyOS Next中的使用方式导致的。从代码来看,主要存在两个问题:
-
直接使用
GlobalLoadingBuilder.builder()
会报"observeComponentCreation2 undefined"错误,这是因为全局Builder需要特殊的上下文环境。 -
使用
wrapBuilder
转换后调用方式不正确,导致"is not callable"错误。
解决方案是修改调用方式:
// 正确的调用方式应该是:
promptAction.openCustomDialog({
builder: GlobalLoadingBuilder.builder // 直接传入builder引用,不要调用()
}
或者保持原有方式但修改wrapBuilder
的用法:
// 修改全局Builder声明
const GlobalLoadingBuilder = wrapBuilder(() => LoadingBuilder());
// 使用时
promptAction.openCustomDialog({
builder: GlobalLoadingBuilder // 直接传入包装后的Builder
}
核心原因是全局Builder在HarmonyOS Next中需要保持其原始引用形式,不能直接调用。这个问题在API 5.0.4版本中确实存在,建议检查Builder的声明和使用方式是否匹配。