feat: add navigation transitions for all 8 routes

This commit is contained in:
Paweł Orzech 2026-03-19 14:08:52 +01:00
parent 59238ff572
commit 4d78029f9d
No known key found for this signature in database

View file

@ -16,6 +16,13 @@ import com.swoosh.microblog.ui.settings.SettingsScreen
import com.swoosh.microblog.ui.setup.SetupScreen import com.swoosh.microblog.ui.setup.SetupScreen
import com.swoosh.microblog.ui.stats.StatsScreen import com.swoosh.microblog.ui.stats.StatsScreen
import com.swoosh.microblog.ui.theme.ThemeViewModel import com.swoosh.microblog.ui.theme.ThemeViewModel
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.animation.slideOutVertically
import androidx.compose.animation.core.tween
object Routes { object Routes {
const val SETUP = "setup" const val SETUP = "setup"
@ -42,7 +49,11 @@ fun SwooshNavGraph(
val feedViewModel: FeedViewModel = viewModel() val feedViewModel: FeedViewModel = viewModel()
NavHost(navController = navController, startDestination = startDestination) { NavHost(navController = navController, startDestination = startDestination) {
composable(Routes.SETUP) { composable(
Routes.SETUP,
enterTransition = { fadeIn(tween(500)) },
exitTransition = { fadeOut(tween(500)) }
) {
SetupScreen( SetupScreen(
onSetupComplete = { onSetupComplete = {
feedViewModel.refresh() feedViewModel.refresh()
@ -53,7 +64,13 @@ fun SwooshNavGraph(
) )
} }
composable(Routes.FEED) { composable(
Routes.FEED,
enterTransition = { fadeIn(tween(300)) },
exitTransition = { fadeOut(tween(200)) },
popEnterTransition = { fadeIn(tween(300)) },
popExitTransition = { fadeOut(tween(200)) }
) {
FeedScreen( FeedScreen(
viewModel = feedViewModel, viewModel = feedViewModel,
onSettingsClick = { navController.navigate(Routes.SETTINGS) }, onSettingsClick = { navController.navigate(Routes.SETTINGS) },
@ -75,7 +92,13 @@ fun SwooshNavGraph(
) )
} }
composable(Routes.COMPOSER) { composable(
Routes.COMPOSER,
enterTransition = { slideInVertically(initialOffsetY = { it }) + fadeIn() },
exitTransition = { fadeOut(tween(200)) },
popEnterTransition = { fadeIn(tween(300)) },
popExitTransition = { slideOutVertically(targetOffsetY = { it }) + fadeOut() }
) {
val composerViewModel: ComposerViewModel = viewModel() val composerViewModel: ComposerViewModel = viewModel()
ComposerScreen( ComposerScreen(
editPost = editPost, editPost = editPost,
@ -91,7 +114,13 @@ fun SwooshNavGraph(
) )
} }
composable(Routes.DETAIL) { composable(
Routes.DETAIL,
enterTransition = { slideInHorizontally(initialOffsetX = { it }) + fadeIn() },
exitTransition = { fadeOut(tween(200)) },
popEnterTransition = { fadeIn(tween(300)) },
popExitTransition = { slideOutHorizontally(targetOffsetX = { it }) + fadeOut() }
) {
val post = selectedPost val post = selectedPost
if (post != null) { if (post != null) {
DetailScreen( DetailScreen(
@ -118,7 +147,13 @@ fun SwooshNavGraph(
} }
} }
composable(Routes.SETTINGS) { composable(
Routes.SETTINGS,
enterTransition = { slideInHorizontally(initialOffsetX = { it }) },
exitTransition = { fadeOut(tween(200)) },
popEnterTransition = { fadeIn(tween(300)) },
popExitTransition = { slideOutHorizontally(targetOffsetX = { it }) }
) {
SettingsScreen( SettingsScreen(
themeViewModel = themeViewModel, themeViewModel = themeViewModel,
onBack = { onBack = {
@ -137,20 +172,38 @@ fun SwooshNavGraph(
) )
} }
composable(Routes.STATS) { composable(
Routes.STATS,
enterTransition = { slideInHorizontally(initialOffsetX = { it }) },
exitTransition = { fadeOut(tween(200)) },
popEnterTransition = { fadeIn(tween(300)) },
popExitTransition = { slideOutHorizontally(targetOffsetX = { it }) }
) {
StatsScreen( StatsScreen(
onBack = { navController.popBackStack() } onBack = { navController.popBackStack() }
) )
} }
composable(Routes.PREVIEW) { composable(
Routes.PREVIEW,
enterTransition = { slideInVertically(initialOffsetY = { it }) + fadeIn() },
exitTransition = { fadeOut(tween(200)) },
popEnterTransition = { fadeIn(tween(300)) },
popExitTransition = { slideOutVertically(targetOffsetY = { it }) + fadeOut() }
) {
PreviewScreen( PreviewScreen(
html = previewHtml, html = previewHtml,
onBack = { navController.popBackStack() } onBack = { navController.popBackStack() }
) )
} }
composable(Routes.ADD_ACCOUNT) { composable(
Routes.ADD_ACCOUNT,
enterTransition = { slideInVertically(initialOffsetY = { it }) + fadeIn() },
exitTransition = { fadeOut(tween(200)) },
popEnterTransition = { fadeIn(tween(300)) },
popExitTransition = { slideOutVertically(targetOffsetY = { it }) + fadeOut() }
) {
SetupScreen( SetupScreen(
onSetupComplete = { onSetupComplete = {
feedViewModel.refreshAccountsList() feedViewModel.refreshAccountsList()