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) }
}
}
}