# androidx.compose.runtime.saveable

Common/All

## Interfaces

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateHolder` | Allows to save the state defined with `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)` for the subtree before disposing it to make it possible to compose it back next time with the restored state. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry` | Allows components to save and restore their state using the saved instance state mechanism. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry.Entry` | The registry entry which you get when you use `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry#registerProvider(kotlin.String,kotlin.Function0)`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` | The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` describes how the object of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` class can be simplified and converted into something which is `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope` | Scope used in `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver#(androidx.compose.runtime.saveable.SaverScope).save(kotlin.Any)`. | Cmn |

## Composables

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable` | Remember the value produced by `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#rememberSaveable(kotlin.Array,kotlin.Function0)`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveableStateHolder.composable` | Creates and remembers the instance of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateHolder`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSerializable.composable` | Remember the value produced by `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#rememberSerializable(kotlin.Array,androidx.savedstate.serialization.SavedStateConfiguration,kotlin.Function0)`, and persist it across activity or process recreation using a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html` for saving and restoring via the saved instance state mechanism. | Cmn |

## Top-level functions summary

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry` | `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#SaveableStateRegistry(kotlin.collections.Map,kotlin.Function1)( restoredValues: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?>>?, canBeSaved: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Creates `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#SaveableStateRegistry(kotlin.collections.Map,kotlin.Function1)`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver<Original, Saveable>` | `<Original : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, Saveable : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html> https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#Saver(kotlin.Function2,kotlin.Function1)( save: https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope.(value) -> Saveable?, restore: (value) -> Original? )` The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#Saver(kotlin.Function2,kotlin.Function1)` describes how the object of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#Saver(kotlin.Function2,kotlin.Function1)` class can be simplified and converted into something which is `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#Saver(kotlin.Function2,kotlin.Function1)`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver<T, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html>` | `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#autoSaver()()` The default implementation of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` which does not perform any conversion. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver<Original, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html>` | `<Original : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, Saveable : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#listSaver(kotlin.Function2,kotlin.Function1)( save: https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope.(value) -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<Saveable>, restore: (list: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<Saveable>) -> Original? )` The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` implementation which allows to represent your `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#listSaver(kotlin.Function2,kotlin.Function1)` class as a list of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#listSaver(kotlin.Function2,kotlin.Function1)` values. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver<T, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html>` | `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#mapSaver(kotlin.Function2,kotlin.Function1)( save: https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope.(value) -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?>, restore: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?>) -> T? )` The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` implementation which allows to represent your class as a map of values which can be saved individually. | Cmn |

## Top-level properties summary

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/ProvidableCompositionLocal<https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry?>` | `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#LocalSaveableStateRegistry()` CompositionLocal with a current `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry` instance. | Cmn |

## Top-level functions

### SaveableStateRegistry

Cmn Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/SaveableStateRegistry.kt+function:SaveableStateRegistry)

```
fun SaveableStateRegistry(
    restoredValues: Map<String, List<Any?>>?,
    canBeSaved: (Any) -> Boolean
): SaveableStateRegistry
```

Creates `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#SaveableStateRegistry(kotlin.collections.Map,kotlin.Function1)`.

| Parameters |
|---|---|
| `restoredValues: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?>>?` | The map of the restored values |
| `canBeSaved: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Function which returns true if the given value can be saved by the registry |

### Saver

Cmn Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/Saver.kt+function:Saver) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0)

```
fun <Original : Any?, Saveable : Any> Saver(
    save: SaverScope.(value) -> Saveable?,
    restore: (value) -> Original?
): Saver<Original, Saveable>
```

The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#Saver(kotlin.Function2,kotlin.Function1)` describes how the object of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#Saver(kotlin.Function2,kotlin.Function1)` class can be simplified and converted into something which is `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#Saver(kotlin.Function2,kotlin.Function1)`.

What types can be saved is defined by `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry`, by default everything which can be stored in the Bundle class can be saved. The implementations can check that the provided value can be saved via `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope#canBeSaved(kotlin.Any)`

You can pass the implementations of this class as a parameter for `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)`.

```kotlin
import androidx.compose.runtime.saveable.Saver

data class Holder(var value: Int)

// this Saver implementation converts Holder object which we don't know how to save
// to Int which we can save
val HolderSaver = Saver<Holder, Int>(save = { it.value }, restore = { Holder(it) })
```

| Parameters |
|---|---|
| `save: https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope.(value) -> Saveable?` | Defines how to convert the value into a saveable one. If null is returned the value will not be saved. |
| `restore: (value) -> Original?` | Defines how to convert the restored value back to the original Class. If null is returned the value will not be restored and would be initialized again instead. |

### autoSaver

Cmn Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/Saver.kt+function:autoSaver) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0)

```
fun <T : Any?> autoSaver(): Saver<T, Any>
```

The default implementation of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` which does not perform any conversion.

It is used by `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)` by default.

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` |   |

### listSaver

Cmn Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/ListSaver.kt+function:listSaver)

```
fun <Original : Any?, Saveable : Any?> listSaver(
    save: SaverScope.(value) -> List<Saveable>,
    restore: (list: List<Saveable>) -> Original?
): Saver<Original, Any>
```

The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` implementation which allows to represent your `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#listSaver(kotlin.Function2,kotlin.Function1)` class as a list of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#listSaver(kotlin.Function2,kotlin.Function1)` values.

What types can be saved is defined by `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry`, by default everything which can be stored in the Bundle class can be saved.

You can use it as a parameter for `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)`.

```kotlin
import androidx.compose.runtime.saveable.Saver
import androidx.compose.runtime.saveable.listSaver

data class Size(val x: Int, val y: Int)

val sizeSaver =
    listSaver<Size, Int>(save = { listOf(it.x, it.y) }, restore = { Size(it[0], it[1]) })
```

### mapSaver

Cmn Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/MapSaver.kt+function:mapSaver)

```
fun <T : Any?> mapSaver(
    save: SaverScope.(value) -> Map<String, Any?>,
    restore: (Map<String, Any?>) -> T?
): Saver<T, Any>
```

The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` implementation which allows to represent your class as a map of values which can be saved individually.

What types can be saved is defined by `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry`, by default everything which can be stored in the Bundle class can be saved.

You can use it as a parameter for `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)`.

```kotlin
import androidx.compose.runtime.saveable.Saver
import androidx.compose.runtime.saveable.mapSaver

data class User(val name: String, val age: Int)

val userSaver = run {
    val nameKey = "Name"
    val ageKey = "Age"
    mapSaver(
        save = { mapOf(nameKey to it.name, ageKey to it.age) },
        restore = { User(it[nameKey] as String, it[ageKey] as Int) },
    )
}
```

## Top-level properties

### LocalSaveableStateRegistry

Cmn Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/SaveableStateRegistry.kt+symbol:LocalSaveableStateRegistry) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0)

```
val LocalSaveableStateRegistry: ProvidableCompositionLocal<SaveableStateRegistry?>
```

CompositionLocal with a current `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry` instance.