0
0

複雑なDeepLinkをJetpackComposeで実装するPart4

Posted at

はじめに

今回は、複雑な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つの記事で書くには大きい内容だったのでいくつかパート分けになってしまい読みづらい点はあるかと思いますが、どなたかのお役に立てれば幸いです

0
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
0
0