You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何导航至同一个Composable组件并传入不同参数?

如何导航至同一个Composable组件并传入不同参数?

我懂你现在的困扰啦——想点击不同难度按钮,跳转到同一个AdditionScreen还带上对应的level参数,用NavHost的时候卡到ChooseLevel的实现了对吧?别慌,这事儿其实很简单,我给你一步步说清楚怎么做:

首先,我们得先把导航的路由规则定义好,用密封类来管理路由会更清晰:

sealed class Screen(val route: String) {
    // 选择难度的界面路由
    object ChooseLevel : Screen("choose_level")
    // 加法界面的路由,用{level}作为参数占位符
    data class AdditionScreen(val level: String) : Screen("addition_screen/{level}") {
        // 生成带具体参数的完整路由
        fun createRoute() = "addition_screen/$level"
    }
}

接下来配置NavHost,把两个界面的路由和对应的Composable绑定起来,重点是怎么解析AdditionScreen的参数:

NavHost(navController = navController, startDestination = Screen.ChooseLevel.route) {
    // 绑定选择难度的界面
    composable(Screen.ChooseLevel.route) {
        ChooseLevelScreen(navController = navController)
    }
    // 绑定加法界面,并从回退栈里解析level参数
    composable(Screen.AdditionScreen.route) { backStackEntry ->
        // 这里用?:"easy"做个默认值,防止参数为空的情况
        val level = backStackEntry.arguments?.getString("level") ?: "easy"
        AdditionScreen(level = level)
    }
}

然后就是你卡住的ChooseLevel界面啦,这里的核心就是点击按钮时,调用navController导航到带对应参数的AdditionScreen路由:

@Composable
fun ChooseLevelScreen(navController: NavController) {
    Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Button(
            onClick = {
                // 点击Easy按钮,导航到带easy参数的路由
                navController.navigate(Screen.AdditionScreen("easy").createRoute())
            }
        ) {
            Text(text = "Easy")
        }
        // 加个间隔让按钮不挤在一起
        Spacer(modifier = Modifier.height(16.dp))
        Button(
            onClick = {
                // 点击Medium按钮,导航到带medium参数的路由
                navController.navigate(Screen.AdditionScreen("medium").createRoute())
            }
        ) {
            Text(text = "Medium")
        }
    }
}

最后就是AdditionScreen接收参数并使用啦,直接把level参数传进来就行:

@Composable
fun AdditionScreen(level: String) {
    Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(text = "当前难度:$level")
        // 这里就可以根据level写你的加法逻辑啦
    }
}

这样操作下来,点击不同按钮就能跳转到同一个AdditionScreen,还能带上对应的难度参数了~如果之后要加Hard难度,只需要多写一个按钮,调用带"hard"参数的路由就行,非常方便。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 14:03:06