Jetpack Compose Navigation 中的参数传递

💡 原文中文,约3300字,阅读约需8分钟。
📝

内容提要

Jetpack Compose Navigation中的参数传递。使用NavController类在不同屏幕之间导航。可以通过向路由添加参数占位符来传递参数。可以传递字符串值或使用转换器传递对象。可以定义多个占位符的路由来传递多个参数。还可以定义可选参数。注意避免字符串/ JSON值中包含“/”。

🔎

延伸解读

参数传递的基本机制

在 Jetpack Compose Navigation 中,参数传递通过路由占位符实现,例如 'detail/{uId}'。发送端使用 navController.navigate() 并替换占位符为具体值,接收端则从 navBackStackEntry.arguments 中提取。这种方式类似于 URL 路径或查询参数,但仅支持字符串值,因此传递对象时需要借助转换器(如 Gson)将对象序列化为 JSON 字符串。

可选参数与默认值处理

可选参数需使用查询参数语法定义,如 'detail?uId={uId}',并设置 defaultValue 或 nullability 为 true。接收端通过 arguments?.getInt() 等方法获取值,并需进行空值检查。这为参数提供了灵活性,但需注意类型匹配,例如 defaultValue 为 0 时类型应设为 NavType.IntType,否则可能导致类型转换错误。

多参数与特殊字符限制

传递多个参数时,可在路由中用斜杠分隔占位符,如 'detail/{name}/{id}',接收端分别提取。若需更多参数,可在查询参数间添加 '&' 符号。但需注意:字符串或 JSON 值中不能包含 '/',否则会因路径解析错误导致应用崩溃。因此,传递对象时应对 JSON 字符串进行编码或替换敏感字符。

❓

Q&A

如何在Jetpack Compose中传递参数到目标屏幕?

可以通过向路由添加参数占位符来传递参数,例如 'detail/{uId}',并使用 navController.navigate() 方法进行导航。

在Jetpack Compose中如何接收传递的参数?

接收端可以通过 navBackStackEntry 提取参数,例如使用 navBackStackEntry.arguments?.getString("uId")。

可以在Jetpack Compose中传递哪些类型的参数?

只能传递字符串值,但可以使用转换器将对象转换为字符串进行传递。

如何在Jetpack Compose中定义多个参数的路由?

可以定义多个占位符的路由,例如 'detail/{name}/{id}',并在接收端提取这些参数。

如何在Jetpack Compose中定义可选参数?

可选参数可以使用查询参数语法定义,并设置默认值或可空性,例如 'detail?uId={uId}'。

在传递参数时需要注意什么?

注意字符串/ JSON 值中不能包含 '/',否则可能导致应用程序崩溃。

🏷️

标签

➡️

继续阅读