HarmonyOS 鸿蒙Next中对 NavDestination 设置 .hideBackButton(true) 引起闪退,不明所以!!!
HarmonyOS 鸿蒙Next中对 NavDestination 设置 .hideBackButton(true) 引起闪退,不明所以!!!
build() { NavDestination(){ Column(){ Button(‘popToName’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.goBack() }) } .width(‘100%’) .height(‘100%’) .backgroundColor(Color.Red) .expandSafeArea([SafeAreaType.SYSTEM],[SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]) } .backgroundColor(Color.Yellow) .backButtonIcon($r(“app.media.app_logo”)) .onReady((ctx: NavDestinationContext) => { // NavDestinationContext获取当前所在的页面栈 this.pathInfos = ctx.pathStack; this.pathInfos.moveToTop(“TablePage”) }) .hideBackButton(true) }
更多关于HarmonyOS 鸿蒙Next中对 NavDestination 设置 .hideBackButton(true) 引起闪退,不明所以!!!的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你确定崩溃是 .hideBackButton(true)
这个API引起的?把它注释掉再重新运行试试看呢。
更多关于HarmonyOS 鸿蒙Next中对 NavDestination 设置 .hideBackButton(true) 引起闪退,不明所以!!!的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我写了一个很简单的demo
复现是这样的:
onePage --> twoPage,在 twoPage 中调用 .hideBackButton(true)
的时候,这时候跳转会直接闪退,如果注释掉则不会闪退。当我在开启全部异常断点的时候会断到 .hideBackButton(true)
这行,继续放开断点不会闪退。
全局断点捕获到异常 TypeError: is not callable@650dacec
,但是不太明白为什么会出现这个错误。
this.pathStack.pushDestinationByName(‘TablePage’, “”) 通过这种方式 push 进来的,
找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17
怎么会
希望HarmonyOS能加强与其他品牌设备的兼容性,让更多人受益。
我觉着应该是某些业务函数引起的崩溃
只写了简单的 demo 就这个问题把我弄蒙了,
你可以把崩溃的日志截一下图, 大家集思广益一下,
很简单的api啊,不应该会引起闪退。
我写了一个很简单的demo
复现是这样的:
onePage --> twoPage,在 twoPage 中 调用 .hideBackButton(true)
的时候,这时候跳转会直接闪退,如果注释掉则不会闪退,当我在开启全部异常断点的时候会断到 .hideBackButton(true)
这行,继续放开断点不会闪退
全局断点捕获到异常 TypeError: is not callable@650dacec
,但是不太明白为什么会出现这个错误
this.pathStack.pushDestinationByName('TablePage', "")
通过这种方式 push 进来的
我理解应该不会才行,不知道是哪里配置导致的?那也不太应该在这里闪退呐?,
鸿蒙Next中对NavDestination设置.hideBackButton(true)导致闪退,可能是以下原因:
- 该方法在特定版本存在兼容性问题;
- 目标页面未正确配置导航属性;
- 调用时机不当,如在页面未完成初始化时调用。
检查SDK版本是否为最新,确认在onPageShow回调之后调用该方法。若问题依旧,可尝试改用NavController.hideBackButton()替代方案。
在HarmonyOS Next中,NavDestination
的.hideBackButton(true)
方法调用导致闪退的问题,可能是由于以下几个原因:
-
调用时机问题:
.hideBackButton(true)
应该在NavDestination
完全初始化后调用。建议将其放在.onReady
回调之后执行。 -
上下文丢失:如果
NavDestinationContext
还未准备好就调用.hideBackButton(true)
,可能导致空指针异常。确保所有NavDestination
相关操作都在正确的上下文中执行。 -
导航栈状态:当页面处于导航栈根位置时,隐藏返回按钮可能会引发异常。建议先检查当前页面在导航栈中的位置:
.onReady((ctx: NavDestinationContext) => { if(ctx.pathStack.size() > 1) { this.hideBackButton(true) } })
-
资源引用问题:代码中同时设置了
.backButtonIcon($r("app.media.app_logo"))
,如果资源不存在也可能导致异常。
建议修改为:
.onReady((ctx: NavDestinationContext) => {
this.pathInfos = ctx.pathStack;
this.pathInfos.moveToTop("TablePage")
if(ctx.pathStack.size() > 1) {
this.hideBackButton(true)
}
})
注意移除或确保.backButtonIcon()
设置的资源存在。