如何使用 jetpack 撰写导航应用可选参数?

问题描述 投票:0回答:1

我已阅读: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
之类的值的字符串,因此它当然可以工作,因为它不是可选参数,而是被迫设置任何值。

问候

android kotlin navigation arguments android-jetpack-compose
1个回答
0
投票

检查以下代码。它的工作原理是不在参数中传递任何值

@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")
}
© www.soinside.com 2019 - 2024. All rights reserved.