HarmonyOS 鸿蒙Next Navigation回退问题

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Navigation回退问题

Navigation 配合 NavDestination,使用stack模式。

我使用的场景:从splash到login页面,Navigtion设置为splash,login设置为navDestination。所以,当前的stack有一个login,还有默认底层的navigation的splash。

现在的问题是:当我在login页面点击返回的时候,我的意图是退出app。但由于还有一个navigation的存在,导致我退到了splash,但这个stack是空的。

现在的解决方案是:我不得不拦截onback事件,然后判断当前stack情况,如果当前还有最后一个,就退出app。

问题:

这里为什么不把navigation起始也算进stack里面,这样我就可以一开始通过replace的方法,将其替换为login页面。

补充:我这里讨论的与splash无关,因为无论如何,你都需要默认设置一个navigation作为起始点,即使它里面什么也没有。



关于HarmonyOS 鸿蒙Next Navigation回退问题的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

15 回复
同问,找了半天不知道如何finish这个splashPage
在根视图设置Navigation,Splash页面跳根视图或者跳Login页面用router方式

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

看得不是很明白,是有2个navigation吗?2个NavPathStack?

建议直接 terminateSelf,查一下这个相关api

(vx:thelou1s)

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

NavPathStack的api中同样有replacePath用于替换当前页面。
官方示例:https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-application-navigation-design-V5

或者这个https://developer.huawei.com/consumer/cn/samples/ 中 搜索导航,也有官方的导航模块构建。
 
闪屏页面要和Navigation分开,根视图是Navigation,闪屏等页面是独立页面,使用router跳转。可以参考HMOS的做法:https://gitee.com/harmonyos_samples/hmosworld

那这岂不是又用了两种路由方式。。。官方推荐Navigation,为什么不把它完善好

更倾向于用router,奈何官方支持Navigation,且router存在缺陷,无奈转向Navigation。 结果刚起头就遇到这个问题。。

不得不说hideNavBar命名有点误导人,只要设置一个空页面作为根容器(Navigation),并将hideNavBar设置为true就可以了。

[@Entry](/user/Entry)
[@Component](/user/Component)
struct RootPage {
  pageStack: NavPathStack = new NavPathStack();

aboutToAppear(): void { const token = MMKV.defaultMMKV().decodeString(Constants.TOKEN) Log.info(“token:”+token + “—”) if(token != null){ this.pageStack.replacePath({name:“Index”}) }else{ this.pageStack.replacePath({name:“AccountLoginPage”}) } }

build() { Navigation(this.pageStack){

}
.hideNavBar(<span class="hljs-literal"><span class="hljs-literal">true</span></span>)
.mode(NavigationMode.Stack)

} }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

 将该页面在EntryAbility中设置为应用入口。

通过代码可以看出此时打开app会直接进入Index或AccountLoginPage,此时返回会直接退出app,不会进入RootPage

你这个方法可以的,我也是找了好久解决方案,不想使用ruter跳转。

现在遇到一个新的问题是,按钮点击使用this.pathStack.pop()返回时,还是会回到RootPage,而不是退出APP

-_-|| 好像确实会,不过我首页和登录页没这种按钮,所以只看了返回手势的效果。能说说你这个按钮的场景么,看看有没有替代方案。

请问楼主,这个问题怎么解决的?
回到顶部