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

Jetpack Compose中如何获取NavDeepLink的完整uriPattern并传递给可组合项?

解决方法

方法1:从触发的深链接URI直接解析

你可以通过NavBackStackEntry的uri属性拿到触发当前页面的完整深链接地址,再从中提取instance和完整URI:

composable(
  route = "c/{name}/{instance}",
  deepLinks = DEFAULT_LEMMY_INSTANCES.map { instance ->
    navDeepLink { uriPattern = "$instance/c/{name}" }
  },
  arguments = listOf(
    navArgument("name") {
      type = NavType.StringType
    },
    // 添加instance参数定义,预留默认值
    navArgument("instance") {
      type = NavType.StringType
      defaultValue = ""
    }
  )
) { backStackEntry ->
  LaunchedEffect(Unit) {
    val name = backStackEntry.arguments?.getString("name")!!
    // 获取触发页面的完整深链接URI
    val deepLinkUri = backStackEntry.uri
    // 从URI中提取instance(取域名/主机部分)
    val instance = deepLinkUri?.host ?: deepLinkUri?.authority ?: ""
    // 获取完整的触发URI字符串
    val fullUriPattern = deepLinkUri?.toString() ?: ""
    
    // 这里就可以用instance和fullUriPattern来处理数据获取逻辑了
  }
}

方法2:调整深链接的参数配置

把instance纳入深链接的参数体系,统一路由和深链接的参数结构:

// 定义通用深链接模板
const val DEEP_LINK_TEMPLATE = "{instance}/c/{name}"

composable(
  route = "c/{name}/{instance}",
  deepLinks = listOf(
    navDeepLink { 
      uriPattern = "https://$DEEP_LINK_TEMPLATE"
      uriPattern = "http://$DEEP_LINK_TEMPLATE"
    }
  ),
  arguments = listOf(
    navArgument("name") {
      type = NavType.StringType
    },
    navArgument("instance") {
      type = NavType.StringType
    }
  )
) { backStackEntry ->
  LaunchedEffect(Unit) {
    val name = backStackEntry.arguments?.getString("name")!!
    // 直接从导航参数中拿到instance
    val instance = backStackEntry.arguments?.getString("instance")!!
    // 拼接出对应的URI pattern
    val fullUriPattern = "$instance/c/$name"
    
    // 后续数据获取逻辑
  }
}

注意事项

  • 第一种方法不需要改动原有固定实例的深链接遍历逻辑,适合已有固定instance列表的场景;
  • 第二种方法更通用,支持任意符合格式的instance,但需要调整深链接的配置方式;
  • 如果DEFAULT_LEMMY_INSTANCES是固定域名列表,第一种方法里可以直接匹配域名来确认对应的instance。

内容的提问来源于stack exchange,提问作者dessalines

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:46:05