在Jetpack Compose中使用导航时缺少道路参数值



我使用Navigation(使用Jetpack Compose(创建了一条道路,因此

composable(CatLifeScreen.AddCatFormScreen.route + "?catId={catId}",
arguments = listOf(
navArgument(name = "catId") {
nullable = true
}
)) {
bottomBarState.value = false
val catId = it.arguments?.getInt("catId")
AddEditCatFormBody(
idOfCat = catId,
navController = navController,
addEditCatViewModel = addEditCatViewModel,
)

如果我不补充任何论点,这条路运行良好

onClick = { navController.navigate(CatLifeScreen.AddCatFormScreen.route) }

如果我定义一个论点,它。论点?。当我传递的参数不为0时,getInt("catId"(为0。

IconButton(onClick = { navController.navigate(CatLifeScreen.AddCatFormScreen.route + "?catId=$idOfCat") } //idOfCat = 1

有人有线索可循吗?我已经被卡住很长时间了

终于找到了答案。对于任何像我一样被困的人:

  1. 输入要接收的数据类型

  2. 整数值不能为null(如果这样做,应用程序将崩溃(。(参见文档https://developer.android.com/guide/navigation/navigation-pass-data#supported_argument_types(。在我的情况下,我没有指定类型

  3. 使用getString(key(获取参数中的key,并将其强制转换为Int(仅当您不指定类型,因为您希望它可以为null。您可能可以用不同的方式处理它(比如当您没有要传递的值而不是null时使用-1(

    composable(CatLifeScreen.AddCatFormScreen.route + "?catId={catId}",
    arguments = listOf(
    navArgument(name = "catId") {
    nullable = true // I don't specify the type because Integer can't be nullable
    }
    )) {
    bottomBarState.value = false
    val catId = it.arguments?.getString("catId")?.toInt() // Fetch key using getString() and cast it
    AddEditCatFormBody(
    idOfCat = catId,
    navController = navController,
    addEditCatViewModel = addEditCatViewModel,
    )
    }
    

尝试键入参数类型,如下所示;

arguments = listOf(
navArgument("catId") {
type = NavType.IntType
nullable = true
}
)

最新更新