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

13 回复

你确定崩溃是 .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啊,不应该会引起闪退。 cke_128.png

我写了一个很简单的demo
复现是这样的:
onePage --> twoPage,在 twoPage 中 调用 .hideBackButton(true) 的时候,这时候跳转会直接闪退,如果注释掉则不会闪退,当我在开启全部异常断点的时候会断到 .hideBackButton(true) 这行,继续放开断点不会闪退
全局断点捕获到异常 TypeError: is not callable@650dacec,但是不太明白为什么会出现这个错误

this.pathStack.pushDestinationByName('TablePage', "") 通过这种方式 push 进来的

我理解应该不会才行,不知道是哪里配置导致的?那也不太应该在这里闪退呐?,

鸿蒙Next中对NavDestination设置.hideBackButton(true)导致闪退,可能是以下原因:

  1. 该方法在特定版本存在兼容性问题;
  2. 目标页面未正确配置导航属性;
  3. 调用时机不当,如在页面未完成初始化时调用。

检查SDK版本是否为最新,确认在onPageShow回调之后调用该方法。若问题依旧,可尝试改用NavController.hideBackButton()替代方案。

在HarmonyOS Next中,NavDestination.hideBackButton(true)方法调用导致闪退的问题,可能是由于以下几个原因:

  1. 调用时机问题:.hideBackButton(true)应该在NavDestination完全初始化后调用。建议将其放在.onReady回调之后执行。

  2. 上下文丢失:如果NavDestinationContext还未准备好就调用.hideBackButton(true),可能导致空指针异常。确保所有NavDestination相关操作都在正确的上下文中执行。

  3. 导航栈状态:当页面处于导航栈根位置时,隐藏返回按钮可能会引发异常。建议先检查当前页面在导航栈中的位置:

    .onReady((ctx: NavDestinationContext) => {
        if(ctx.pathStack.size() > 1) {
            this.hideBackButton(true)
        }
    })
    
  4. 资源引用问题:代码中同时设置了.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()设置的资源存在。

回到顶部