您好,非常感谢您考虑我的问题。我想知道如何将多个变量传递给 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
因此数据传递不正确。
我提前感谢您让我知道我做错了什么。
您应该使用
/
拆分多个参数,类似于深层链接或 web。完整路线应类似于“TwoPlayerGame/Mike/Allison”。所以在你的 NavHost
中你会有这样的东西:
...
composable(Destination.TwoPlayerGame.route + "{playerOneName}/{playerTwoName}")
...
并导航到它:
navController.navigate(Destination.TwoPlayerGame.route + "$playerOneName/$playerTwoName")