Jetpack Compose Navigation路由如何设置通配参数处理含/的Deep Link?
可以实现,Jetpack Compose Navigation原生支持通过正则表达式约束路径参数来捕获指定位置后的全部内容,这是针对该问题的根本解决方案,步骤如下:
1. 修改Deep Link的URI模式
默认情况下,Navigation的路径参数仅匹配到下一个/为止(默认正则为[^/]+),因此会截断含/的内容。我们需要修改参数的匹配规则,让它捕获showContent/之后的所有字符(包括/)。
在定义composable路由时,将Deep Link的uriPattern中的参数部分改为{content:.+}:
composable( route = "showContent/{content}", deepLinks = listOf( navDeepLink { uriPattern = "myDisplayApp://showContent/{content:.+}" } ) ) { backStackEntry -> // 从BackStack中获取完整的参数内容 val fullContent = backStackEntry.arguments?.getString("content") // 展示传入的内容 ContentDisplayScreen(content = fullContent ?: "") }
其中.+是正则表达式,代表匹配一个或多个任意字符(包含/),这样就能完整捕获showContent/之后的所有内容。
2. 按需调整正则规则
如果需要支持showContent/后面无内容的场景(即空参数),可以把正则改为.*(匹配零个或多个任意字符):
uriPattern = "myDisplayApp://showContent/{content:.*}"
3. 验证效果
当传入类似myDisplayApp://showContent/user/profile/settings的Deep Link时,content参数会被赋值为user/profile/settings,不会因路径中的/导致路由匹配失败或应用崩溃,完全符合你需要展示全部传入内容的需求。
内容的提问来源于stack exchange,提问作者Gamer2015
相关产品推荐
相关产品推荐

