有没有办法使用 Jetpack Compose 在处理程序中进行导航?

Is there a way to make a navigation work inside a handler using Jetpack Compose?

我正在尝试使用 Jetpack Compose 创建启动画面。我创建了我的导航并且我有我所有的 ID 去不同的屏幕,但我不能让一个屏幕导航到 Hadler 内部的另一个。你们怎么看?

    @Composable
fun GoToMainScreen(navController: NavHostController){
    Handler(Looper.getMainLooper()).postDelayed(object : Thread() {
        override fun run() {
            navController.navigate("main_screen")
            Log.i("LOOPER", "It got here!")
        }
    }, 4000L)
}

我试过了,在我的例子中,它可以很好地使用你的可组合项:

val navController = rememberNavController()
NavHost(navController = navController, startDestination = "profile") {
    composable("profile") {
        GoToMainScreen(navController)
    }
    composable("main_screen") { Text("main_screen") }
}

不确定您的情况有何不同,但在 compose 中我们通常不需要 Handler

首先,您需要包装处理程序的创建LaunchedEffect,否则您的处理程序可能会在屏幕重组的情况下创建多次。

并且在 LaunchedEffect 中我们可以使用协同程序,所以用更少的代码看起来像:

@Composable
fun GoToMainScreen(navController: NavHostController) {
    LaunchedEffect(Unit) {
        delay(2000L)
        navController.navigate("main_screen")
    }
}

如果这仍然不能帮助确保提供 minimal-reproducible-example,类似于我的第一个代码块。