如何在Jetpack Compose中获取跨页面传递的accessToken参数
解决方案
步骤1:调整NavHost中AccountListScreen的路由配置,声明参数并取值
修改你MainActivity里的AccountListScreen对应的composable代码:
// 需导入两个依赖 // import androidx.navigation.NavType // import androidx.navigation.compose.navArgument composable( route = Screen.AccountListScreen.route + "/{accessToken}", arguments = listOf(navArgument("accessToken") { type = NavType.StringType }) ) { backStackEntry -> val accessToken = backStackEntry.arguments?.getString("accessToken") ?: "" AccountListScreen(navController, accessToken) }
步骤2:修改AccountListScreen的函数签名接收参数
@Composable fun AccountListScreen( navController: NavController, accessToken: String, // 新增参数接收传值 viewModel: AccountListViewModel = hiltViewModel() ) { // 此处可直接使用accessToken参数 }
2.4.0-alpha10版本报错排查
你碰到的报错基本是以下两个原因导致:
- 未手动导入
NavType和navArgument两个类,补充导入即可 - 没有从composable回调的
backStackEntry中取参数,直接在AccountListScreen内部尝试获取参数导致报错
注意:如果你的accessToken包含斜杠、问号等特殊符号,传递前需要用
URLEncoder.encode(accessToken, StandardCharsets.UTF_8.name())编码,取值后用URLDecoder.decode(accessToken, StandardCharsets.UTF_8.name())解码,否则会出现路由匹配失败的问题。
内容的提问来源于stack exchange,提问作者Morozov
相关产品推荐
相关产品推荐

