rememberDeferredTransition

Functions summary

DeferredTransition<T>

Creates and remembers a DeferredTransition for a given DeferredTransitionState.

Cmn

Functions

rememberDeferredTransition

@ExperimentalDeferredTransitionApi
@Composable
fun <T : Any?> rememberDeferredTransition(
    transitionState: DeferredTransitionState<T>,
    label: String? = null
): DeferredTransition<T>

Creates and remembers a DeferredTransition for a given DeferredTransitionState.

A DeferredTransition allows for a two-stage state update:

  1. Deferred Phase: Initiated by DeferredTransitionState.defer. The transition's targetState remains unchanged, while the new target is exposed via pendingTargetState. This allows higher-level components to implement custom behavior (e.g., manual gesture tracking) while the automatic transition is "held".

  2. Automatic Phase: Initiated by DeferredTransitionState.animateTo. The pendingTargetState is cleared and targetState is updated, starting the automatic transition animations.

import androidx.compose.animation.core.DeferredTransitionState
import androidx.compose.animation.core.Transition
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.rememberDeferredTransition
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer

var targetState by remember { mutableStateOf("Initial") }
var isDeferred by remember { mutableStateOf(false) }

// Create a DeferredTransitionState
val transitionState = remember { DeferredTransitionState(targetState) }

// Use LaunchedEffect to handle defer/animateTo logic based on some external signal
// (e.g. gesture progress, predictive back events, etc).
LaunchedEffect(targetState, isDeferred) {
    if (isDeferred) {
        // Enter deferred phase: targetState is updated as a pendingTargetState
        // but animations don't start yet.
        transitionState.defer(targetState)
    } else {
        // Start automatic transition: pendingTargetState is cleared and targetState is updated
        // to trigger animations.
        transitionState.animateTo(targetState)
    }
}

val transition = rememberDeferredTransition(transitionState)
// Create animations as usual
val alpha by transition.animateFloat { state -> if (state == "Initial") 0f else 1f }

Box(Modifier.graphicsLayer { this.alpha = alpha }) {
    // Content
}
Parameters
transitionState: DeferredTransitionState<T>

The DeferredTransitionState that manages the current and target states.

label: String? = null

An optional label for the transition to be displayed in Android Studio's Animation Preview.

Returns
DeferredTransition<T>

A DeferredTransition that will update whenever transitionState changes.