您可以将 NavHostController 传递给子 Composable 以允许访问 navController.navigate("Route") 吗?

Can you pass NavHostController to a child Composable in order to allow access to the navController.navigate("Route")?

我是 Jetpack Compose 的新手,正在努力了解如何将 Navigation 库与 Compose 集成。 我已经成功地实现了底部导航,但现在正在努力访问子组件中的 .navigate("route") 方法。我是否应该将 navController 作为参数从 NavHost 内部的可组合项中传递?这是我的代码,让事情更清楚。

这是我的 HomeScreen.kt @Composable,它调用 rememberNavController() 方法以及 NavHost() 可组合项,如下所示...

@Composable
fun HomeScreen() {
val navController = rememberNavController()
...
Scaffold(
   ...
) {
    NavHost(navController, startDestination = "route") {
        composable("route") { Settings(navController) }
  } 
}

所以在这里您可以看到我将 navController 作为参数传递给 Settings 可组合项。我不确定这是否正确。现在,如果可能的话,最终我想从设置可组合项中访问 navController.navigate("route") 方法,类似于以下内容。

@Composable
fun Settings(navController: NavHostController) {
   ...
   Button(onClick = {navController.navigate("route")}) {
        Text(text = "button text")
    }
   ...
}

不幸的是,我无法访问 .navigate 方法,因为它说“None 可以使用提供的参数调用以下函数。”感谢您的时间和帮助!!

navigate("route")方法是an extension method。因此您必须显式导入它:

import androidx.navigation.compose.navigate