# PickerState

Artifact: [androidx.wear.compose:compose-material3](https://developer.android.com/jetpack/androidx/releases/wear-compose) [View Source](https://cs.android.com/search?q=file:androidx/wear/compose/material3/Picker.kt+class:androidx.wear.compose.material3.PickerState) Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)


```
class PickerState : ScrollableState
```

<br />

*** ** * ** ***

A state object that can be hoisted to observe item selection.

In most cases, this will be created via `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/rememberPickerState.composable#rememberPickerState(kotlin.Int,kotlin.Int,kotlin.Boolean)`.

## Summary

| ### Public companion properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver<https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html>` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#Saver()` The default `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#Saver()` implementation for `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState`. |

| ### Public constructors |
|---|
| `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/annotation/RememberInComposition https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#PickerState(kotlin.Int,kotlin.Int,kotlin.Boolean)( initialNumberOfOptions: @https://developer.android.com/reference/kotlin/androidx/annotation/IntRange(from = 1) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, initiallySelectedIndex: @https://developer.android.com/reference/kotlin/androidx/annotation/IntRange(from = 0) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, shouldRepeatOptions: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` |

| ### Public functions |
|---|---|
| `suspend https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#animateScrollToOption(kotlin.Int)(index: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Animate (smooth scroll) to the given option at `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#animateScrollToOption(kotlin.Int)`. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#dispatchRawDelta(kotlin.Float)(delta: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html)` |
| `open suspend https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#scroll(androidx.compose.foundation.MutatePriority,kotlin.coroutines.SuspendFunction1)(scrollPriority: https://developer.android.com/reference/kotlin/androidx/compose/foundation/MutatePriority, block: suspend https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/ScrollScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)` |
| `suspend https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#scrollToOption(kotlin.Int)(index: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Instantly scroll to an option. |

| ### Public properties |
|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#canScrollBackward()` |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#canScrollForward()` |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#isScrollInProgress()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#numberOfOptions()` Represents how many different choices are presented by this `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/Picker.composable#Picker(androidx.wear.compose.material3.PickerState,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function1,kotlin.Function0,androidx.compose.ui.unit.Dp,kotlin.Float,androidx.compose.ui.graphics.Color,kotlin.Boolean,androidx.wear.compose.foundation.rotary.RotaryScrollableBehavior,kotlin.Function2)` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#selectedOptionIndex()` Index of the selected option (i.e. at the center). |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#shouldRepeatOptions()` if true (the default), the options will be repeated. |

| ### Inherited properties |
|---|
| From [androidx.compose.foundation.gestures.ScrollableState](https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/ScrollableState) |---|---| | `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/ScrollableState#lastScrolledBackward()` | | `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/ScrollableState#lastScrolledForward()` | | `open https://developer.android.com/reference/kotlin/androidx/compose/foundation/ScrollIndicatorState?` | `https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/ScrollableState#scrollIndicatorState()` | |

## Public companion properties

### Saver

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
val Saver: Saver<PickerState, Any>
```

The default `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#Saver()` implementation for `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState`.

## Public constructors

### PickerState

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
@RememberInComposition
PickerState(
    initialNumberOfOptions: @IntRange(from = 1) Int,
    initiallySelectedIndex: @IntRange(from = 0) Int = 0,
    shouldRepeatOptions: Boolean = true
)
```

| Parameters |
|---|---|
| `initialNumberOfOptions: @https://developer.android.com/reference/kotlin/androidx/annotation/IntRange(from = 1) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | the number of options. |
| `initiallySelectedIndex: @https://developer.android.com/reference/kotlin/androidx/annotation/IntRange(from = 0) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html = 0` | the index of the option to show in the center at the start, zero-based. |
| `shouldRepeatOptions: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = true` | if true (the default), the options will be repeated. |

## Public functions

### animateScrollToOption

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
suspend fun animateScrollToOption(index: Int): Unit
```

Animate (smooth scroll) to the given option at `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/PickerState#animateScrollToOption(kotlin.Int)`.

A smooth scroll always happens to the closest item if PickerState has repeatItems=true. For example, picker values are : 0 1 2 3 0 1 2 3 0 1 2 3 Target value is 0. 0 1 2 3 \>0\< 1 2 3\>0\< 1 2 3 Picker can be scrolled forwards or backwards. To get to the target 0 it requires 1 step to scroll forwards and 3 steps to scroll backwards. Picker will be scrolled forwards as this is the closest destination.

If the distance between possible targets is the same, picker will be scrolled backwards.

```kotlin
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material3.Button
import androidx.wear.compose.material3.Picker
import androidx.wear.compose.material3.Text
import androidx.wear.compose.material3.rememberPickerState

val coroutineScope = rememberCoroutineScope()
val state = rememberPickerState(initialNumberOfOptions = 10)

Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
    Picker(
        state = state,
        verticalSpacing = 4.dp,
        contentDescription = { "${state.selectedOptionIndex + 1}" },
    ) {
        Button(
            onClick = { coroutineScope.launch { state.animateScrollToOption(it) } },
            label = { Text("$it") },
        )
    }
}
```

| Parameters |
|---|---|
| `index: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The index of the option to scroll to. |

### dispatchRawDelta

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

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

### scroll

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
open suspend fun scroll(scrollPriority: MutatePriority, block: suspend ScrollScope.() -> Unit): Unit
```

### scrollToOption

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
suspend fun scrollToOption(index: Int): Unit
```

Instantly scroll to an option.

```kotlin
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material3.Button
import androidx.wear.compose.material3.Picker
import androidx.wear.compose.material3.Text
import androidx.wear.compose.material3.rememberPickerState

val coroutineScope = rememberCoroutineScope()
val state = rememberPickerState(initialNumberOfOptions = 10)
Picker(
    state = state,
    verticalSpacing = 4.dp,
    contentDescription = { "${state.selectedOptionIndex + 1}" },
) {
    Button(
        onClick = { coroutineScope.launch { state.scrollToOption(it) } },
        label = { Text("$it") },
    )
}
```

| Parameters |
|---|---|
| `index: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The index of the option to scroll to. |

## Public properties

### canScrollBackward

```
open val canScrollBackward: Boolean
```

### canScrollForward

```
open val canScrollForward: Boolean
```

### isScrollInProgress

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
open val isScrollInProgress: Boolean
```

### numberOfOptions

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
var numberOfOptions: Int
```

Represents how many different choices are presented by this `https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/Picker.composable#Picker(androidx.wear.compose.material3.PickerState,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function1,kotlin.Function0,androidx.compose.ui.unit.Dp,kotlin.Float,androidx.compose.ui.graphics.Color,kotlin.Boolean,androidx.wear.compose.foundation.rotary.RotaryScrollableBehavior,kotlin.Function2)`

### selectedOptionIndex

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
val selectedOptionIndex: Int
```

Index of the selected option (i.e. at the center).

### shouldRepeatOptions

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/wear-compose#1.5.0)

```
val shouldRepeatOptions: Boolean
```

if true (the default), the options will be repeated.