Skip to content

Instantly share code, notes, and snippets.

View fvilarino's full-sized avatar

Francesc Vilariño Güell fvilarino

View GitHub Profile
@fvilarino
fvilarino / shared_elem_nav_host.kt
Created April 21, 2024 00:07
Shared Elem - NavHost
NavHost(
navController = navController,
startDestination = "list",
modifier = Modifier.fillMaxSize(),
enterTransition = { slideInHorizontally { it } + fadeIn() },
exitTransition = { slideOutHorizontally { -it } + fadeOut() },
popEnterTransition = { slideInHorizontally { -it } + fadeIn() },
popExitTransition = { slideOutHorizontally { it } + fadeOut() },
) {
// omitted
@fvilarino
fvilarino / shared_elem_shared_bounds.kt
Created April 21, 2024 00:02
Shared Elem - Shared Bounds
LoremIpsum(
modifier = Modifier
.fillMaxWidth()
.sharedBounds(
rememberSharedContentState(
key = "text-$url"
),
animatedVisibilityScope,
),
maxLines = 3,
@fvilarino
fvilarino / shared_elem_skip_ahed.t
Last active April 21, 2024 19:28
Shared Elem - Skip Ahead
LoremIpsum(
modifier = Modifier
.fillMaxWidth()
.sharedElement(
rememberSharedContentState(
key = "text-$url"
),
animatedVisibilityScope,
)
.skipToLookaheadSize(),
@fvilarino
fvilarino / shared_elem_details_text.kt
Created April 20, 2024 23:46
Shared Elem - Details Text
@Composable
fun SharedTransitionScope.DetailsScreen(
url: String,
animatedVisibilityScope: AnimatedVisibilityScope,
onClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier
.clickable(
@fvilarino
fvilarino / shared_elem_list_text.kt
Last active April 21, 2024 19:28
Shared Elem - List Text
@Composable
fun SharedTransitionScope.ListScreen(
animatedVisibilityScope: AnimatedVisibilityScope,
onItemClick: (String) -> Unit,
modifier: Modifier = Modifier
) {
LazyColumn(
modifier = modifier,
verticalArrangement = Arrangement.spacedBy(8.dp),
contentPadding = PaddingValues(all = 16.dp),
@fvilarino
fvilarino / shared_elem_details_calling.kt
Created April 20, 2024 23:29
Shared Elem - Details Calling
composable(
route = "details/{url}"
) { backstackEntry ->
val encoded = backstackEntry.arguments?.getString("url") ?: error("No URL")
val url = URLDecoder.decode(encoded, "UTF-8")
DetailsScreen(
url = url,
animatedVisibilityScope = this@composable,
onClick = { navController.popBackStack() },
modifier = Modifier.fillMaxSize(),
@fvilarino
fvilarino / shared_elem_animated_details.kt
Created April 20, 2024 23:26
Share Elem - Animated Details
@Composable
// 1
fun SharedTransitionScope.DetailsScreen(
url: String,
// 2
animatedVisibilityScope: AnimatedVisibilityScope,
onClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Column(
@fvilarino
fvilarino / shared_elem_list_calling.kt
Created April 20, 2024 22:55
Shared Elem - List Calling
composable(
route = "list"
) {
ListScreen(
// 1
animatedVisibilityScope = this@composable,
onItemClick = { item ->
val encoded = URLEncoder.encode(item, "UTF-8")
navController.navigate("details/$encoded")
},
@fvilarino
fvilarino / shared_elem_animated_list.kt
Last active April 21, 2024 19:27
Shared Elem - Animated List
@Composable
// 1
fun SharedTransitionScope.ListScreen(
// 2
animatedVisibilityScope: AnimatedVisibilityScope,
onItemClick: (String) -> Unit,
modifier: Modifier = Modifier
) {
LazyColumn(
modifier = modifier,
@fvilarino
fvilarino / shared_elem_layout_wrapper.kt
Created April 20, 2024 22:33
Shared Elem - Layout Wrapper
@Composable
fun Home(modifier: Modifier = Modifier) {
val navController = rememberNavController()
// 1
SharedTransitionLayout(
modifier = modifier,
) {
NavHost(
navController = navController,
startDestination = "list",