はじめに
今回は、複雑なDeepLinkが来たときやDeepLinkの内容によってホーム画面で出しわけないといけない時の実装を紹介していきます
本文
最後はMainNavGraphの実装です。
MainNavGraph
@Composable
fun MainNavGraph(
navController: NavHostController,
// sealdClassでどの画面に遷移するのかを引数でもらいます
navigateScreenType: NavigateScreenType,
) {
// 何もNavGraphをセットしてない状態でゲットを呼ぶとExceptionが帰ってくるので、その時は何もリンクがなかったとしてホーム画面を表示するのみにします
val startDestination = try {
// ホーム画面で表示するダイアログ等がDeepLinkにあるときはNavGraph自体を更新しないとホーム画面に変更が通知されないので強制的にNavGraphを変更します
if (navController.graph.startDestinationRoute == BottomBarNav.homeRoot) {
when (navigateScreenType) {
NavigateScreenType.HogeLink, -> {
DeepLinkNav.hogeRoot
}
NavigateScreenType.fugaLink -> {
DeepLinkNav.FugaRoot
}
else -> {
BottomBarNav.homeRoot
}
}
} else {
BottomBarNav.homeRoot
}
} catch (e: Exception) {
BottomBarNav.homeRoot
}
NavHost(
navController = navController,
startDestination = startDestination,
modifier = modifier
) {
// 最後にネストナビゲーションをNavHostに登録します
homeNavGraph(navController, navigateScreenType)
hogeNavGraph(navController, navigateScreenType)
fugaNavGraph(navController, navigateScreenType)
}
}
これで、ホームViewで各種遷移処理を実装すれば問題なく表示できると思います
最後に
今回でが最終パートになります
1つの記事で書くには大きい内容だったのでいくつかパート分けになってしまい読みづらい点はあるかと思いますが、どなたかのお役に立てれば幸いです