SwipeToDismissBoxState

Class

Common
class SwipeToDismissBoxState

State of the SwipeToDismissBox composable.

Secondary Constructors

constructor(
    initialValue: SwipeToDismissBoxValue,
    positionalThreshold: (totalDistance: Float) -> Float,
) {
    this.anchoredDraggableState = AnchoredDraggableState(initialValue)
    this.positionalThreshold = positionalThreshold
}

State of the SwipeToDismissBox composable.

Parameters

initialValueThe initial value of the state.
positionalThresholdThe positional threshold to be used when calculating the target state while a swipe is in progress and when settling after the swipe ends. This is the distance from the start of a transition. It will be, depending on the direction of the interaction, added or subtracted from/to the origin offset. It should always be a positive value.
constructor(
    initialValue: SwipeToDismissBoxValue,
    density: Density,
    confirmValueChange: (SwipeToDismissBoxValue) -> Boolean = { true },
    positionalThreshold: (totalDistance: Float) -> Float,
) {
    this.anchoredDraggableState =
        AnchoredDraggableState(
            initialValue = initialValue,
            confirmValueChange = confirmValueChange,
            velocityThreshold = { with(density) { DismissVelocityThreshold.toPx() } },
            positionalThreshold = positionalThreshold,
            snapAnimationSpec = AnchoredDraggableDefaults.SnapAnimationSpec,
            decayAnimationSpec = AnchoredDraggableDefaults.DecayAnimationSpec,
        )
}

State of the SwipeToDismissBox composable.

Parameters

initialValueThe initial value of the state.
densityThe density that this state can use to convert values to and from dp.
confirmValueChangeOptional callback invoked to confirm or veto a pending state change.
positionalThresholdThe positional threshold to be used when calculating the target state while a swipe is in progress and when settling after the swipe ends. This is the distance from the start of a transition. It will be, depending on the direction of the interaction, added or subtracted from/to the origin offset. It should always be a positive value.

Properties

Common
val currentValue: SwipeToDismissBoxValue

The current state value of the SwipeToDismissBoxState.

Common
val targetValue: SwipeToDismissBoxValue

The target state. This is the closest state to the current offset (taking into account positional thresholds). If no interactions like animations or drags are in progress, this will be the current state.

Common
val settledValue: SwipeToDismissBoxValue

The value the SwipeToDismissBoxState is currently settled at. When progressing through multiple anchors, e.g. A -> B -> C, settledValue will stay the same until settled at an anchor, while currentValue will update to the closest anchor.

Common
@get:FloatRange(from = 0.0, to = 1.0)

val progress: Float

The fraction of the progress going from currentValue to targetValue, within 0f..1f bounds.

Common
val dismissDirection: SwipeToDismissBoxValue

The direction (if any) in which the composable has been or is being dismissed.

Use this to change the background of the SwipeToDismissBox if you want different actions on each side.

Functions

fun requireOffset(): Float

Require the current offset.

suspend fun snapTo(targetValue: SwipeToDismissBoxValue)

Set the state without any animation and suspend until it's set

Parameters

targetValueThe new target value
suspend fun reset() =
        anchoredDraggableState.animateTo(targetValue = SwipeToDismissBoxValue.Settled)

Reset the component to the default position with animation and suspend until it if fully reset or animation has been cancelled. This method will throw CancellationException if the animation is interrupted

Returns

the reason the reset animation ended
suspend fun dismiss(direction: SwipeToDismissBoxValue)

Dismiss the component in the given direction, with an animation and suspend. This method will throw CancellationException if the animation is interrupted

Parameters

directionThe dismiss direction.

Companion Object

Methods

Common

Deprecated ConfirmValueChangeDeprecated

fun Saver(
            confirmValueChange: (SwipeToDismissBoxValue) -> Boolean,
            positionalThreshold: (totalDistance: Float) -> Float,
            density: Density,
        ) =
            Saver<SwipeToDismissBoxState, SwipeToDismissBoxValue>(
                save = { it.currentValue },
                restore = {
                    SwipeToDismissBoxState(it, density, confirmValueChange, positionalThreshold)
                },
            )

Saver implementation for SwipeToDismissBoxState.

Common
fun Saver(positionalThreshold: (totalDistance: Float) -> Float) =
            Saver<SwipeToDismissBoxState, SwipeToDismissBoxValue>(
                save = { it.currentValue },
                restore = { SwipeToDismissBoxState(it, positionalThreshold) },
            )

The default Saver implementation for SwipeToDismissBoxState.