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