https://kotlinlang.org logo
Title
k

K Merle

10/28/2021, 5:15 PM
Any suggestions on how to improve my custom navigation animations? I've wrapped them inside a composable function.
@Composable
fun rememberTransitions(duration: Int = 500): Transitions {
    val density = LocalDensity.current.density
    val screenWidthDp = LocalConfiguration.current.screenWidthDp
    val width = (screenWidthDp * density).toInt()
    return rememberSaveable { Transitions(duration, width) }
}

class Transitions(private val duration: Int, private val screenWidth: Int): Serializable {

    fun enterTransition(initialOffsetX: Int = screenWidth): EnterTransition {
        return slideInHorizontally(
            initialOffsetX = { initialOffsetX },
            animationSpec = tween(
                durationMillis = duration,
                easing = FastOutSlowInEasing
            )
        )
    }

    fun exitTransition(initialOffsetX: Int = screenWidth): ExitTransition {
        return slideOutHorizontally(
            targetOffsetX = { -initialOffsetX },
            animationSpec = tween(
                durationMillis = duration,
                easing = FastOutSlowInEasing
            )
        )
    }

    fun popEnterTransition(initialOffsetX: Int = screenWidth): EnterTransition {
        return slideInHorizontally(
            initialOffsetX = { -initialOffsetX },
            animationSpec = tween(
                durationMillis = duration,
                easing = FastOutSlowInEasing
            )
        )
    }

    fun popExitTransition(initialOffsetX: Int = screenWidth): ExitTransition {
        return slideOutHorizontally(
            targetOffsetX = { initialOffsetX },
            animationSpec = tween(
                durationMillis = duration,
                easing = FastOutSlowInEasing
            )
        )
    }
}