From 575b94c81ba87ab368b514f7f5843ec02638e7a8 Mon Sep 17 00:00:00 2001 From: Thomas Andres Gomez Date: Sat, 8 May 2021 23:03:30 +0200 Subject: [PATCH] change transition between list and detail. --- .idea/misc.xml | 2 ++ .../composable/screen/MainScreenComposable.kt | 30 +++++++++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index e2f6ad4..cbbbc13 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -134,6 +134,8 @@ + + diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt index 197b5be..dca3b75 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt @@ -1,13 +1,11 @@ package com.pixelized.biblib.ui.composable.screen -import androidx.compose.animation.Crossfade +import androidx.compose.animation.* import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.sharp.ArrowBack import androidx.compose.material.icons.sharp.LocalLibrary -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue +import androidx.compose.runtime.* import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -44,6 +42,7 @@ fun MainScreenComposablePreview() { } } +@OptIn(ExperimentalAnimationApi::class) @Composable fun MainScreenComposable( navigation: INavigation = viewModel() @@ -57,11 +56,24 @@ fun MainScreenComposable( Scaffold( topBar = { ToolbarComposable(navigation) }, ) { - Crossfade(targetState = page) { - when (it) { - is Page.HomePage -> HomePageComposable(navigation) - is Page.Detail -> DetailPageComposable(it.book) - } + AnimatedVisibility( + visible = page is Page.HomePage, + initiallyVisible = true, + enter = slideInHorizontally(initialOffsetX = { width -> -width }), + exit = slideOutHorizontally(targetOffsetX = { width -> -width }), + ) { + HomePageComposable(navigation) + } + AnimatedVisibility( + visible = page is Page.Detail, + initiallyVisible = false, + enter = slideInHorizontally(initialOffsetX = { width -> width }), + exit = slideOutHorizontally(targetOffsetX = { width -> width }), + ) { + // small trick to display the detail page during animation exit. + var currentPage by remember { mutableStateOf(null) } + currentPage = page as? Page.Detail ?: currentPage + currentPage?.let { DetailPageComposable(it.book) } } } }