Skip to content

Commit

Permalink
Update navigation host
Browse files Browse the repository at this point in the history
  • Loading branch information
muhxdan committed Dec 25, 2023
1 parent 13040c6 commit 1659b8f
Showing 1 changed file with 88 additions and 22 deletions.
110 changes: 88 additions & 22 deletions app/src/main/java/com/salt/apps/moov/ui/navigation/MoovNavHost.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.salt.apps.moov.ui.navigation

import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.salt.apps.moov.ui.navigation.MoovScreen.DETAIL
import com.salt.apps.moov.ui.navigation.MoovScreen.FAVORITE
Expand All @@ -17,33 +20,96 @@ import com.salt.apps.moov.ui.screens.favorite.FavoriteScreen
import com.salt.apps.moov.ui.screens.home.HomeScreen

@Composable
fun MoovNavHost(
navBackStackEntry: NavBackStackEntry?,
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
) {
fun MoovNavHost(navController: NavHostController, innerPadding: PaddingValues) {
NavHost(
navController = navController,
startDestination = HOME.route,
modifier = modifier
modifier = Modifier.padding(innerPadding),
) {
composable(HOME.route) {
homeComposable(navController = navController)
detailComposable(navController = navController)
favoriteComposable(navController = navController)
}
}

fun NavGraphBuilder.homeComposable(navController: NavHostController) {
composable(
route = HOME.route,
enterTransition = {
return@composable slideIntoContainer(
AnimatedContentTransitionScope.SlideDirection.Start, tween(500)
)
},
exitTransition = {
return@composable slideOutOfContainer(
AnimatedContentTransitionScope.SlideDirection.Start, tween(500)
)
},
popEnterTransition = {
return@composable slideIntoContainer(
AnimatedContentTransitionScope.SlideDirection.End, tween(500)
)
},
content = {
HomeScreen(
navController
navController = navController,
)
}
composable(
route = DETAIL.route + "/{movieId}",
arguments = listOf(
navArgument(name = "movieId") {
type = NavType.IntType
}
)
) {
DetailScreen(navBackStackEntry?.arguments?.getInt("movieId"))
)
}

fun NavGraphBuilder.detailComposable(navController: NavHostController) {
composable(
route = "${DETAIL.route}/{movieId}",
arguments = listOf(
navArgument(name = "movieId") {
type = NavType.IntType
}
),
enterTransition = {
return@composable slideIntoContainer(
AnimatedContentTransitionScope.SlideDirection.Start, tween(500)
)
},
exitTransition = {
return@composable slideOutOfContainer(
AnimatedContentTransitionScope.SlideDirection.End, tween(500)
)
},
popEnterTransition = {
return@composable slideIntoContainer(
AnimatedContentTransitionScope.SlideDirection.Start, tween(500)
)
},
content = {
val movieId = navController.currentBackStackEntry?.arguments?.getInt("movieId")
DetailScreen(movieId = movieId)
}
composable(FAVORITE.route) {
FavoriteScreen()
)
}

fun NavGraphBuilder.favoriteComposable(navController: NavHostController) {
composable(
route = FAVORITE.route,
enterTransition = {
return@composable slideIntoContainer(
AnimatedContentTransitionScope.SlideDirection.Start, tween(500)
)
},
exitTransition = {
return@composable slideOutOfContainer(
AnimatedContentTransitionScope.SlideDirection.End, tween(500)
)
},
popEnterTransition = {
return@composable slideIntoContainer(
AnimatedContentTransitionScope.SlideDirection.Start, tween(500)
)
},
content = {
FavoriteScreen(
navController = navController,
)
}
}
)
}

0 comments on commit 1659b8f

Please sign in to comment.