From 0422438c09cc57731f0fd1db367561453905178a Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Sun, 7 Sep 2025 21:38:27 +0300 Subject: [PATCH] Improve animations Signed-off-by: denis0001-dev --- app/src/main/java/ru/fromchat/ui/App.kt | 62 +++++++++++++++++++++---- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/ru/fromchat/ui/App.kt b/app/src/main/java/ru/fromchat/ui/App.kt index b57dcff..cc1d1fb 100644 --- a/app/src/main/java/ru/fromchat/ui/App.kt +++ b/app/src/main/java/ru/fromchat/ui/App.kt @@ -1,8 +1,13 @@ package ru.fromchat.ui +import androidx.compose.animation.AnimatedContentTransitionScope.SlideDirection.Companion.End +import androidx.compose.animation.AnimatedContentTransitionScope.SlideDirection.Companion.Start +import androidx.compose.animation.core.tween import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember +import androidx.compose.ui.unit.IntOffset +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController import ru.fromchat.ui.auth.LoginScreen import ru.fromchat.ui.auth.RegisterScreen import ru.fromchat.ui.chat.ChatScreen @@ -10,14 +15,51 @@ import ru.fromchat.ui.chat.ChatScreen @Composable fun App() { FromChatTheme { - val (route, setRoute) = remember { mutableStateOf("login") } - when (route) { - "login" -> LoginScreen( - onLoginSuccess = { setRoute("chat") }, - onNavigateToRegister = { setRoute("register") } - ) - "register" -> RegisterScreen(onRegistered = { setRoute("login") }) - "chat" -> ChatScreen() + val navController = rememberNavController() + val animationSpec = tween(400) + + NavHost( + navController = navController, + startDestination = "login", + enterTransition = { + slideIntoContainer( + Start, + animationSpec = animationSpec + ) + }, + exitTransition = { + slideOutOfContainer( + Start, + animationSpec = animationSpec + ) + }, + popEnterTransition = { + slideIntoContainer( + End, + animationSpec = animationSpec + ) + }, + popExitTransition = { + slideOutOfContainer( + End, + animationSpec = animationSpec + ) + } + ) { + composable("login") { + LoginScreen( + onLoginSuccess = { navController.navigate("chat") }, + onNavigateToRegister = { navController.navigate("register") } + ) + } + + composable("register") { + RegisterScreen( + onRegistered = { navController.navigate("login") } + ) + } + + composable("chat") { ChatScreen() } } } } \ No newline at end of file