<div class='type'>Composable Function</div>


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



<h2 id="producestate-initialvalue-producer">produceState</h2>

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


```kotlin
@Composable
public fun <T> produceState(
    initialValue: T,
    producer: suspend ProduceStateScope<T>.() -> Unit,
): State<T>
```


Return an observable `snapshot` `State` that
produces values over time without a defined data source.

`producer` is launched when `produceState` enters the composition and is cancelled when
`produceState` leaves the composition. `producer` should use `ProduceStateScope.value` to set new
values on the returned `State`.

The returned `State` conflates values; no change will be observable if `ProduceStateScope.value`
is used to set a value that is `equal` to its old value, and observers may only see
the latest value if several values are set in rapid succession.

`produceState` may be used to observe either suspending or non-suspending sources of external
data, for example:





<hr class="docs-overload-divider">


<h2 id="producestate-initialvalue-key1-producer">produceState</h2>

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


```kotlin
@Composable
public fun <T> produceState(
    initialValue: T,
    key1: Any?,
    producer: suspend ProduceStateScope<T>.() -> Unit,
): State<T>
```


Return an observable `snapshot` `State` that
produces values over time from `key1`.

`producer` is launched when `produceState` enters the composition and is cancelled when
`produceState` leaves the composition. If `key1` changes, a running `producer` will be cancelled
and re-launched for the new source. `producer` should use `ProduceStateScope.value` to set new
values on the returned `State`.

The returned `State` conflates values; no change will be observable if `ProduceStateScope.value`
is used to set a value that is `equal` to its old value, and observers may only see
the latest value if several values are set in rapid succession.

`produceState` may be used to observe either suspending or non-suspending sources of external
data, for example:





<hr class="docs-overload-divider">


<h2 id="producestate-initialvalue-key1-key2-producer">produceState</h2>

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


```kotlin
@Composable
public fun <T> produceState(
    initialValue: T,
    key1: Any?,
    key2: Any?,
    producer: suspend ProduceStateScope<T>.() -> Unit,
): State<T>
```


Return an observable `snapshot` `State` that
produces values over time from `key1` and `key2`.

`producer` is launched when `produceState` enters the composition and is cancelled when
`produceState` leaves the composition. If `key1` or `key2` change, a running `producer` will be
cancelled and re-launched for the new source. `producer` should use `ProduceStateScope.value` to
set new values on the returned `State`.

The returned `State` conflates values; no change will be observable if `ProduceStateScope.value`
is used to set a value that is `equal` to its old value, and observers may only see
the latest value if several values are set in rapid succession.

`produceState` may be used to observe either suspending or non-suspending sources of external
data, for example:





<hr class="docs-overload-divider">


<h2 id="producestate-initialvalue-key1-key2-key3-producer">produceState</h2>

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


```kotlin
@Composable
public fun <T> produceState(
    initialValue: T,
    key1: Any?,
    key2: Any?,
    key3: Any?,
    producer: suspend ProduceStateScope<T>.() -> Unit,
): State<T>
```


Return an observable `snapshot` `State` that
produces values over time from `key1`, `key2` and `key3`.

`producer` is launched when `produceState` enters the composition and is cancelled when
`produceState` leaves the composition. If `key1`, `key2` or `key3` change, a running `producer`
will be cancelled and re-launched for the new source.
`producer should use `ProduceStateScope.value` to set new values on the returned `State`.

The returned `State` conflates values; no change will be observable if `ProduceStateScope.value`
is used to set a value that is `equal` to its old value, and observers may only see
the latest value if several values are set in rapid succession.

`produceState` may be used to observe either suspending or non-suspending sources of external
data, for example:





<hr class="docs-overload-divider">


<h2 id="producestate-initialvalue-producer-2">produceState</h2>

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


```kotlin
@Composable
public fun <T> produceState(
    initialValue: T,
    vararg keys: Any?,
    producer: suspend ProduceStateScope<T>.() -> Unit,
): State<T>
```


Return an observable `snapshot` `State` that
produces values over time from `keys`.

`producer` is launched when `produceState` enters the composition and is cancelled when
`produceState` leaves the composition. If `keys` change, a running `producer` will be cancelled
and re-launched for the new source. `producer` should use `ProduceStateScope.value` to set new
values on the returned `State`.

The returned `State` conflates values; no change will be observable if `ProduceStateScope.value`
is used to set a value that is `equal` to its old value, and observers may only see
the latest value if several values are set in rapid succession.

`produceState` may be used to observe either suspending or non-suspending sources of external
data, for example: