如何在 Android Jetpack Compose 中传递可选的布尔参数?

Jér*_*lot 1 android android-jetpack android-architecture-navigation android-jetpack-compose

我试图在用户可以从欢迎页面显示欢迎消息时在仪表板上向用户显示欢迎消息。因此,在仪表板的路线中,我定义了一个可选参数。

无需任何参数即可访问它(因为它是可选的),但当我添加一个时,它就不再工作了。

       composable(Routes.welcome) {
            WelcomeScreen {
                navController.navigate("dashboard?isWelcome={true}")
            }
        }

        composable(
            "dashboard?isWelcome={isWelcome}}",
            arguments = listOf(
                navArgument("isWelcome") {
                    type = NavType.BoolType
                }
            )
        ) {
            val isFromWelcome = it.arguments?.getBoolean("isWelcome") ?: false
...
}
Run Code Online (Sandbox Code Playgroud)

我的错误是:

Navigation destination that matches request NavDeepLinkRequest{ uri=android-app://androidx.navigation/dashboard?isWelcome={true} } cannot be found in the navigation graph
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议 :)

Mer*_*ost 7

发送布尔值

val booleanValue = true
navController.navigate("my_destination?my_arg_id=${booleanValue}")
Run Code Online (Sandbox Code Playgroud)

接收布尔值

composable(
    route = "my_destination?my_arg_id={my_arg_id}",
    arguments = listOf(navArgument("my_arg_id") { defaultValue = false })
) { from ->
    val myBooleanArg = from.arguments?.getBoolean("my_arg_id")
    MySecondScreen(myBooleanArg)
}
Run Code Online (Sandbox Code Playgroud)

  • 路线错误。你总是会收到错误的信息。根据官方文档(https://developer.android.com/jetpack/compose/navigation#optical-args),你必须将 `{ }` 放入路线中。例如:`route = "my_destination?my_arg_id={$booleanValue}",` (2认同)