# CompositionLocalConsumerSubspaceModifierNode

Artifact: [androidx.xr.compose:compose](https://developer.android.com/jetpack/androidx/releases/xr-compose) [View Source](https://cs.android.com/search?q=file:androidx/xr/compose/subspace/node/CompositionLocalConsumerSubspaceModifierNode.kt+class:androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)


```
interface CompositionLocalConsumerSubspaceModifierNode : DelegatableSubspaceNode
```

<br />

*** ** * ** ***

Implementing this interface allows your `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` subclass to read `https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal` via the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode).currentValueOf(androidx.compose.runtime.CompositionLocal)` function. The values of each CompositionLocal will be resolved based on the context of the layout node that the modifier is attached to, meaning that the modifier will see the same values of each CompositionLocal as its corresponding layout node.

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` |   |
| `https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal` |   |

## Summary

| ### Extension functions |
|---|---|
| `T` | `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/CompositionLocalConsumerSubspaceModifierNode.https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/CompositionLocalConsumerSubspaceModifierNode#(androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode).currentValueOf(androidx.compose.runtime.CompositionLocal)( local: https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal<T> )` Returns the current value of `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode).currentValueOf(androidx.compose.runtime.CompositionLocal)` at the position in the composition hierarchy of this modifier's attached layout node. |

### Inherited properties

From [androidx.xr.compose.subspace.layout.DelegatableSubspaceNode](https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/DelegatableSubspaceNode) `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/DelegatableSubspaceNode#node()`

A reference of the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` that holds this node's position in the node hierarchy.

## Extension functions

### CompositionLocalConsumerSubspaceModifierNode.currentValueOf

Artifact: [androidx.xr.compose:compose](https://developer.android.com/jetpack/androidx/releases/xr-compose) [View Source](https://cs.android.com/search?q=file:androidx/xr/compose/subspace/node/CompositionLocalConsumerSubspaceModifierNode.kt+function:currentValueOf)

```
fun <T : Any?> CompositionLocalConsumerSubspaceModifierNode.currentValueOf(
    local: CompositionLocal<T>
): T
```

Returns the current value of `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode).currentValueOf(androidx.compose.runtime.CompositionLocal)` at the position in the composition hierarchy of this modifier's attached layout node.

Unlike `https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal#current()`, reads via this function are not automatically tracked by Compose. Modifiers are not able to recompose in the same way that a Composable can, and therefore can't receive updates arbitrarily for a CompositionLocal.

Because CompositionLocals may change arbitrarily, it is strongly recommended to ensure that the composition local is observed instead of being read once. If you call `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode).currentValueOf(androidx.compose.runtime.CompositionLocal)` inside of a modifier callback like `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode#(androidx.xr.compose.subspace.layout.SubspaceMeasureScope).measure(androidx.xr.compose.subspace.layout.SubspaceMeasurable,androidx.xr.compose.unit.VolumeConstraints)`, then Compose will track the CompositionLocal read. This happens automatically, because these Compose UI phases take place in a snapshot observer that tracks which states are read. If the value of the CompositionLocal changes, and it was read inside of the measure or draw phase, then that phase will automatically be invalidated.

For all other reads of a CompositionLocal, this function will **not** notify you when the value of the local changes.

This function will fail with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` if you attempt to read a CompositionLocal before the node is `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node#onAttach()` or after the node is `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node#onDetach()`.

| Parameters |
|---|---|
| `local: https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal<T>` | The CompositionLocal to get the current value of |

| Returns |
|---|---|
| `T` | The value provided by the nearest CompositionLocalProvider component that invokes, directly or indirectly, the composable function that this modifier is attached to. If `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode).currentValueOf(androidx.compose.runtime.CompositionLocal)` was never provided, its default value will be returned instead. |