---
title: "DraggableState"
description: "State of [draggable]. Allows for a granular control of how deltas are consumed by the user as
well as to write custom drag methods using [drag] suspend function."
type: "interface"
---

<div class='type'>Interface</div>


<a id='references'></a>

<div class='sourceset sourceset-common'>Common</div>



```kotlin
@JvmDefaultWithCompatibility
interface DraggableState
```


State of `draggable`. Allows for a granular control of how deltas are consumed by the user as
well as to write custom drag methods using `drag` suspend function.


## Functions

```kotlin
suspend fun drag(
        dragPriority: MutatePriority = MutatePriority.Default,
        block: suspend DragScope.() -> Unit,
    )
```


Call this function to take control of drag logic.

All actions that change the logical drag position must be performed within a `drag` block
(even if they don't call any other methods on this object) in order to guarantee that mutual
exclusion is enforced.

If `drag` is called from elsewhere with the `dragPriority` higher or equal to ongoing drag,
ongoing drag will be canceled.

#### Parameters

| | |
| --- | --- |
| dragPriority | of the drag operation |
| block | to perform drag in |



```kotlin
fun dispatchRawDelta(delta: Float)
```


Dispatch drag delta in pixels avoiding all drag related priority mechanisms.

**NOTE:** unlike `drag`, dispatching any delta with this method will bypass scrolling of any
priority. This method will also ignore `reverseDirection` and other parameters set in
`draggable`.

This method is used internally for low level operations, allowing implementers of
`DraggableState` influence the consumption as suits them, e.g. introduce nested scrolling.
Manually dispatching delta via this method will likely result in a bad user experience, you
must prefer `drag` method over this one.

#### Parameters

| | |
| --- | --- |
| delta | amount of scroll dispatched in the nested drag process |




