我已阅读:https://developer.android.com/jetpack/compose/navigation#optional-args
这是我的代码:
override fun getComposableSettings(): ComposableSettings {
return ComposableSettings(
route = "${BASE_ROUTE}?$ARG_SEARCH_TEXT_DEEPLINK={${ARG_SEARCH_TEXT_DEEPLINK}}",
arguments = listOf(
navArgument(ARG_SEARCH_TEXT_DEEPLINK) {
type = NavType.StringType
defaultValue = ""
},
)
)
}
这是我的路线:
fun getRoute(searchText: String = ""): String {
return "${BASE_ROUTE}?$ARG_SEARCH_TEXT_DEEPLINK={${searchText}}"
}
它有效,因为我的论点始终是
String
,其价值:{}
,
所以它不是空字符串,但总是有价值的,那么我需要删除这个括号以使其正常工作并与下一步操作一起操作。
对我来说这是无稽之谈。
它应该是可选参数,就像如果它是空的,它会与 empty defaultValue
一起使用,仅此而已。
在本文档示例中,添加了具有类似 test1234
之类的值的字符串,因此它当然可以工作,因为它不是可选参数,而是被迫设置任何值。
问候
检查以下代码。它的工作原理是不在参数中传递任何值
@Composable
fun MyApp() {
val context = LocalContext.current
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "profile") {
composable("profile") { Profile(navController, null) }
composable(
"friendslist?userId={userId}",
arguments = listOf(navArgument("userId") { nullable = true })
) { backStackEntry ->
FriendsList(navController, backStackEntry.arguments?.getString("userId"))
}
}
}
@Composable
fun Profile(navController: NavHostController, string: String?) {
Log.d("MainActivity", "Profile: ")
//Here the navigation to friendslist is not having any arguments
navController.navigate("friendslist")
//Here the navigation to friendslist with arguments
navController.navigate("friendslist?userId=1234")
}
@Composable
fun FriendsList(navController: NavHostController, string: String?) {
Log.d("MainActivity", "FriendsList: $string")
}