Nat Strangerweather
06/03/2024, 3:39 PMNat Strangerweather
06/03/2024, 3:39 PM@OptIn(ExperimentalSharedTransitionApi::class)
@Composable
fun SharedTransitionScope.HomeScreen(
modifier: Modifier = Modifier,
onItemClick: (Int, String) -> Unit,
animatedVisibilityScope: AnimatedVisibilityScope
) {
Scaffold(
topBar = { TopBar() },
) { innerPadding ->
val listOfCardTitles = listOf("Art", "Books", "Music", "Cinema")
val listOfImages =
listOf(R.drawable.art, R.drawable.literature, R.drawable.music, R.drawable.cinema)
Box(
modifier = modifier
.fillMaxSize()
.padding(innerPadding)
) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center
) {
listOfImages.forEachIndexed { index, resId ->
HomeCard(
modifier = Modifier
.padding(10.dp)
.weight(0.25f)
.clickable { onItemClick(resId, listOfCardTitles[index]) }
.sharedElement(
state = rememberSharedContentState(key = "image/$resId"),
animatedVisibilityScope = animatedVisibilityScope,
boundsTransform = { _, _ ->
tween(durationMillis = 1000, easing = LinearOutSlowInEasing)
}
),
title = listOfCardTitles[index],
image = listOfImages[index]
)
}
}
}
}
}
Stylianos Gakis
06/03/2024, 3:57 PMColumn {
TopBar()
Content()
}
anyway since you're not using snackbars or whatever.Nat Strangerweather
06/03/2024, 4:00 PMRebecca Franks
06/03/2024, 4:19 PMNat Strangerweather
06/03/2024, 4:22 PM@OptIn(ExperimentalSharedTransitionApi::class)
@Composable
fun NavigationGraph(
navController: NavHostController
) {
SharedTransitionLayout {
NavHost(
navController = navController,
startDestination = Screen.HomeScreen.route
) {
composable(route = Screen.HomeScreen.route) {
HomeScreen(
onItemClick = { resId, text ->
when (resId) {
2131099650 -> navController.navigate(Screen.ArtScreen.route + "/$resId/$text")
2131099660 -> navController.navigate(Screen.BooksScreen.route + "/$resId/$text")
2131099661 -> navController.navigate(Screen.MusicScreen.route + "/$resId/$text")
2131099651 -> navController.navigate(Screen.CinemaScreen.route + "/$resId/$text")
}
},
animatedVisibilityScope = this
)
}
composable(route = Screen.ArtScreen.route + "/{resId}/{title}",
arguments = listOf(
navArgument("resId") { type = NavType.IntType },
navArgument("title") { type = NavType.StringType }
)
) {
val resId = it.arguments?.getInt("resId") ?: 0
val title = it.arguments?.getString("title") ?: ""
ArtScreen(
resId = resId, title = title,
animatedVisibilityScope = this
)
}
composable(route = Screen.BooksScreen.route + "/{resId}/{title}",
arguments = listOf(
navArgument("resId") { type = NavType.IntType },
navArgument("title") { type = NavType.StringType }
)
) {
val resId = it.arguments?.getInt("resId") ?: 0
val title = it.arguments?.getString("title") ?: ""
BooksScreen(
resId = resId, title = title,
animatedVisibilityScope = this
)
}
composable(route = Screen.MusicScreen.route + "/{resId}/{title}",
arguments = listOf(
navArgument("resId") { type = NavType.IntType },
navArgument("title") { type = NavType.StringType }
)
) {
val resId = it.arguments?.getInt("resId") ?: 0
val title = it.arguments?.getString("title") ?: ""
MusicScreen(
resId = resId, title = title,
animatedVisibilityScope = this
)
}
composable(route = Screen.CinemaScreen.route + "/{resId}/{title}",
arguments = listOf(
navArgument("resId") { type = NavType.IntType },
navArgument("title") { type = NavType.StringType }
)
) {
val resId = it.arguments?.getInt("resId") ?: 0
val title = it.arguments?.getString("title") ?: ""
CinemaScreen(
resId = resId, title = title,
animatedVisibilityScope = this
)
}
}
}
}
Rebecca Franks
06/03/2024, 4:32 PMNat Strangerweather
06/03/2024, 4:36 PMNat Strangerweather
06/03/2024, 4:51 PMNat Strangerweather
06/03/2024, 4:56 PMStylianos Gakis
06/03/2024, 5:01 PMNat Strangerweather
06/03/2024, 5:04 PMNat Strangerweather
06/03/2024, 5:06 PMNat Strangerweather
06/03/2024, 5:06 PMRebecca Franks
06/03/2024, 5:21 PMRebecca Franks
06/03/2024, 5:22 PMTolriq
06/03/2024, 6:01 PMlouiscad
06/04/2024, 12:14 PMNat Strangerweather
06/04/2024, 3:07 PM