@@ -33,13 +33,20 @@ package no.nordicsemi.android.common.navigation
33
33
34
34
import android.app.Activity
35
35
import android.os.Bundle
36
- import androidx.activity.compose.BackHandler
36
+ import androidx.compose.animation.AnimatedContentTransitionScope
37
+ import androidx.compose.animation.EnterTransition
38
+ import androidx.compose.animation.ExitTransition
39
+ import androidx.compose.animation.SizeTransform
40
+ import androidx.compose.animation.core.tween
41
+ import androidx.compose.animation.fadeIn
42
+ import androidx.compose.animation.fadeOut
37
43
import androidx.compose.runtime.Composable
38
44
import androidx.compose.runtime.getValue
39
45
import androidx.compose.ui.Modifier
40
46
import androidx.compose.ui.platform.LocalContext
41
47
import androidx.hilt.navigation.compose.hiltViewModel
42
48
import androidx.lifecycle.compose.collectAsStateWithLifecycle
49
+ import androidx.navigation.NavBackStackEntry
43
50
import androidx.navigation.NavGraph.Companion.findStartDestination
44
51
import androidx.navigation.NavGraphBuilder
45
52
import androidx.navigation.compose.NavHost
@@ -59,11 +66,40 @@ import no.nordicsemi.android.common.navigation.internal.navigate
59
66
*
60
67
* @param destinations The list of possible destinations.
61
68
* @param modifier The modifier to be applied to the layout.
69
+ * @param enterTransition callback to define enter transitions for destination in this host
70
+ * @param exitTransition callback to define exit transitions for destination in this host
71
+ * @param popEnterTransition callback to define popEnter transitions for destination in this host
72
+ * @param popExitTransition callback to define popExit transitions for destination in this host
73
+ * @param sizeTransform callback to define the size transform for destinations in this host
62
74
*/
63
75
@Composable
64
76
fun NavigationView (
65
77
destinations : List <NavigationDestination >,
66
78
modifier : Modifier = Modifier ,
79
+ enterTransition :
80
+ (@JvmSuppressWildcards
81
+ AnimatedContentTransitionScope <NavBackStackEntry >.() -> EnterTransition ) =
82
+ {
83
+ fadeIn(animationSpec = tween(700))
84
+ },
85
+ exitTransition :
86
+ (@JvmSuppressWildcards
87
+ AnimatedContentTransitionScope <NavBackStackEntry >.() -> ExitTransition ) =
88
+ {
89
+ fadeOut(animationSpec = tween(700))
90
+ },
91
+ popEnterTransition :
92
+ (@JvmSuppressWildcards
93
+ AnimatedContentTransitionScope <NavBackStackEntry >.() -> EnterTransition ) =
94
+ enterTransition,
95
+ popExitTransition :
96
+ (@JvmSuppressWildcards
97
+ AnimatedContentTransitionScope <NavBackStackEntry >.() -> ExitTransition ) =
98
+ exitTransition,
99
+ sizeTransform :
100
+ (@JvmSuppressWildcards
101
+ AnimatedContentTransitionScope <NavBackStackEntry >.() -> SizeTransform ? )? =
102
+ null,
67
103
) {
68
104
val navHostController = rememberNavController()
69
105
@@ -114,6 +150,11 @@ fun NavigationView(
114
150
modifier = modifier,
115
151
navController = navHostController,
116
152
startDestination = destinations.first().id.name,
153
+ enterTransition = enterTransition,
154
+ exitTransition = exitTransition,
155
+ popEnterTransition = popEnterTransition,
156
+ popExitTransition = popExitTransition,
157
+ sizeTransform = sizeTransform,
117
158
) {
118
159
create(destinations, navigation)
119
160
}
0 commit comments