はじめに
今回は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の更新方法を紹介しました
備忘録メインですが、どなたかのお役に立てれば幸いです