diff --git a/voyager-transitions/src/commonMain/kotlin/cafe/adriel/voyager/transitions/CrossfadeTransition.kt b/voyager-transitions/src/commonMain/kotlin/cafe/adriel/voyager/transitions/CrossfadeTransition.kt new file mode 100644 index 00000000..72b08008 --- /dev/null +++ b/voyager-transitions/src/commonMain/kotlin/cafe/adriel/voyager/transitions/CrossfadeTransition.kt @@ -0,0 +1,29 @@ +package cafe.adriel.voyager.transitions + +import androidx.compose.animation.Crossfade +import androidx.compose.animation.core.FiniteAnimationSpec +import androidx.compose.animation.core.tween +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.navigator.Navigator + +@Composable +public fun CrossfadeTransition( + navigator: Navigator, + animationSpec: FiniteAnimationSpec = tween(), + label: String = "Crossfade", + modifier: Modifier = Modifier, + content: @Composable (Screen) -> Unit = { it.Content() } +) { + Crossfade( + targetState = navigator.lastItem, + animationSpec = animationSpec, + modifier = modifier, + label = label + ) { screen -> + navigator.saveableState("transition", screen) { + content(screen) + } + } +}