1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Jetpack Compose単一ActivityでDeepLinkを使う方法

Posted at

はじめに

今回はJetpack Composeの単一ActivityでDeepLinkを使う方法を紹介していこうと思います。
簡単そうに聞こえますが、自分はDeepLinkが保持され続けてしまうという落とし穴にかかったので備忘録的に残しておこうと思います。

本文

まず、DeepLinkの取得に関しては以前記事を書いたので下記を参照してください
https://qiita.com/ryuji_sato/items/82ad63c48a35b7aee1e5

取得ができましたら遷移処理の実装です
前提として、今回自分が紹介していく構造としては単一Activityに対してオンボード用、ログイン後のメイン等でNavGraphが分かれていることとします。
そこでログイン後のメインとなるNavGraphに対する実装を紹介します。

@Composable
fun MainNavGraph(
    navController: NavHostController,
// 引数にDeepLinkをnullableで宣言
    deepLink: Uri?,
) {
    NavHost(
        navController = navController,
        startDestination = BottomBarNav.home,
    ) {
        composable(
            route = BottomBarNav.home,
// argmentsとしてdeep_linkにDeepLinkが入るように実装
// ここでdefaultValueは絶対にコードの通りにする
            arguments = listOf(
                navArgument("deep_link") {
                    type = NavType.StringType
                    defaultValue = deepLink.toString()
                }
            )
        ) {
// argmentsからリンクを取得する
            val deepLinkString = checkNotNull(it.arguments).getString("deep_link")
            HomeView(
                navController,
                hiltViewModel(),
// Viewに渡す
                deepLinkString?.toUri()
            )
        }
    }
}

上記のようにすれば何もDeepLinkがなかった場合はnullが入ってるので直前に取得していたDeepLinkは上書きされます。
BottomBarNav.homeの中身は下記のようになっています

// {deep_link}に値が格納される
const val home = "home/{deep_link}"

最後に

今回は自分が地味に詰まったDeepLinkの更新方法を紹介しました
備忘録メインですが、どなたかのお役に立てれば幸いです

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?