如何从通知中使用深链接导航到可组合屏幕?

huangapple go评论61阅读模式
英文:

How to navigate to a composable screen from a notification with deeplinks?

问题

我想在点击包含标题、正文和ID等数据的通知时,导航到一个组合屏幕。这个ID应该在创建路由时传递给组合屏幕。

这是我的组合屏幕导航:

object Screen : AppDestination("screen/{id}") {
    fun createRoute(id: String): String {
        return "screen/$id"
    }

"id"是当列表中的某个项目被点击时要传递的值。

"idNotation"是我从通知中获取的ID。

如果我在调用createRoute后在深链接中获取它,我该如何将idNotation传递给路由?

我已经测试了如何将ID传递给通知的挂起意图,这部分是有效的,我只是不确定如何将它传递给路由。

英文:

I want to navigate to a composable screen when clicking on a notification that contains data like title, body, and an id. This id should be passed to the composable when the route is created.

object Screen : AppDestination("screen/{id}") {
fun createRoute(id: String): String {
    return "screen/$id"
}

This is my composable screen navigation

fun NavGraphBuilder.screenGraph(
    navController: NavHostController
) {
    composable(
        route = Screen.route,
              arguments = listOf(navArgument("id") { type = NavType.StringType },
        navArgument("idnotation") { type = NavType.StringType }),
    deepLinks = listOf(
        navDeepLink {
            uriPattern = "myapp://screennavigation/idnotation={idnotation}"
        }
    ) {
        Screen(
            payloadId = it.arguments?.getString("id"),
        )
    }
}

The "id" is the when a certain item from a list is clicked to navigate to it.

The "idNotation" is the id that i get from the notification.

How can I pass the idNotation to the route if i'm getting it in the deeplink after the route is createRoute is called?

I tested how i'm passing the Id to the intent inside a pending intent for a notification and that works, i'm getting it correctly, I'm just not sure how to pass it to the route.

答案1

得分: 2

你的深度链接是

"myapp://screennavigation/idnotation={idnotation}"

这意味着{idnotation}占位符的值将被放入带有键idnotation的参数中。如果你想要它填充id字段(以匹配你的路由和arguments列表),那么你将想使用{id}

uriPattern = "myapp://screennavigation/idnotation={id}"
英文:

Your deep link is

"myapp://screennavigation/idnotation={idnotation}"

Which means that the value of the {idnotation} placeholder will be put into your arguments with the key idnotation. If you want it to instead fill in the id field (to match your route and arguments list), then you'll want to use {id}:

uriPattern = "myapp://screennavigation/idnotation={id}"

huangapple
  • 本文由 发表于 2023年2月27日 04:22:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/75574803.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定