如何将两个变量传递给 NavHost 然后传递到另一个屏幕?

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

您好,非常感谢您考虑我的问题。我想知道如何将多个变量传递给 Navhost。我可以发送一个变量,但一旦我尝试发送两个变量,它就不再起作用了?

我正在尝试将两个变量传递给我的 NavHost。

这是我的按钮:

 var playerOneName = "Mike"
 var playerTwoName = "Allison"
 
Button(onClick = { navController.navigate(Destination.TwoPlayerGame.route +playerOneName"+"$playerTwoName")}) {
                    Text(text = "Start Game")
                }

我的 NavHost 看起来像:


@Composable
fun NavigationAppHost (navController: NavController) {

    NavHost(navController = navController as NavHostController, startDestination = "PlayerSelection") {
        composable(Destination.PlayerSelection.route)  { PlayerSelection(navController) }
        composable(Destination.TwoPlayerGame.route + "{playerOneName}" + "{playerTwoName}") {backStackEntry ->

        val playerOneName = backStackEntry.arguments?.getString("playerOneName")
        val playerTwoName = backStackEntry.arguments?.getString("playerTwoName")

            TwoPlayerGame(navController,playerOneName,playerTwoName) }

            composable(Destination.ThreePlayerGame.route)  {ThreePlayerGame(navController)}

            composable(Destination.FourPlayerGame.route)  {FourPlayerGame(navController)}
    }


}

最后,可组合双人游戏如下所示:


@Composable
fun TwoPlayerGame(navController: NavController, playerOneName: String?, playerTwoName: String?) {
    var plr1Name: String? by remember { mutableStateOf("") }
    var plr2Name: String? by remember { mutableStateOf("") }
    

plr1Name = playerOneName
plr2Name = playerTwoName

  
    Card(modifier = Modifier.fillMaxWidth()) {

        Column {
            Text("Two Player Game")
            Text("Player One = ${plr1Name}")
            Text("Player Two = ${plr2Name}")
        }



    }


}

所以这有效......有点。输出是:

玩家一号 = M 第二名球员 = ikeAllison

因此数据传递不正确。

我提前感谢您让我知道我做错了什么。

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

您应该使用

/
拆分多个参数,类似于深层链接或 web。完整路线应类似于“TwoPlayerGame/Mike/Allison”。所以在你的
NavHost
中你会有这样的东西:

...
composable(Destination.TwoPlayerGame.route + "{playerOneName}/{playerTwoName}")
...

并导航到它:

navController.navigate(Destination.TwoPlayerGame.route + "$playerOneName/$playerTwoName")
© www.soinside.com 2019 - 2024. All rights reserved.