kotlin 为什么navigateUp()在jetpack合成中返回2个屏幕?

xkftehaa  于 2022-12-30  发布在  Kotlin
关注(0)|答案(1)|浏览(165)

我开始使用jetpack组合导航,但是当我调用navController.navigateUp()时遇到了一个问题。由于某种原因,它弹出了两个屏幕而不是一个。
主菜单-〉列表-〉新建便笺-〉调用navController. navigateUp()-〉列表-〉主菜单.
这是导航主机代码:

val navController = rememberNavController()
            NavHost(
                navController = navController,
                startDestination = NoteScreen.MainScreen.route
            ) {
                composable(route = NoteScreen.MainScreen.route) {
                    MainScreen(navController)
                }
                composable(route = NoteScreen.ListScreen.route) {
                    ListScreen(navController)
                }
                composable(route = NoteScreen.DetailScreen.route + "/{${Constants.NOTE_ID}}") {
                    DetailScreen()
                }
                composable(route = NoteScreen.NewNoteScreen.route) {
                    NewNoteScreen(navController)
                }
            }

这里是调用navigateUp()的代码

val state by remember {
        newNoteViewModel.state
    }
if (state.finishUpload) {
        if (state.countFail == 0) {
            navController.navigateUp()
        }

先谢了。

编辑

出于某种原因,这是多次调用。

bjp0bcyl

bjp0bcyl1#

已经找到了解决方案,问题是我调用它作为对组合的检查,他在navigateUp上再次运行,我需要调用它作为启动效果。

LaunchedEffect(key1 = state) {
        if (state.finishUpload && state.countFail == 0) {
            navController.navigateUp()
        }
    }

相关问题