# androidx.xr.compose.subspace.node

## Interfaces

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/CompositionLocalConsumerSubspaceModifierNode` | 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. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutAwareModifierNode` | A `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/DelegatableSubspaceNode` whose `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutAwareModifierNode#onPlaced(androidx.xr.compose.subspace.layout.SubspaceLayoutCoordinates)` callback is invoked when the layout coordinates of the layout node may have changed. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode` | A specialized `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` responsible for modifying the measurement and layout behavior of its wrapped content within the Subspace environment. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceMeasuredSizeAwareModifierNode` | A `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` which receives callbacks when the layout it is attached to is remeasured. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceSemanticsInfo` | Provides semantic information about a node in the Subspace layout hierarchy. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceSemanticsModifierNode` | A `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` that adds semantics key/values for use in testing, accessibility, and similar use cases. |

## Classes

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeElement` | Modifier elements manage an instance of a particular `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` implementation. |

## Extension functions summary

|---|---|
| `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/package-summary#(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. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode.https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.SubspaceLayoutModifierNode).invalidateMeasurement()()` Requests a remeasure of the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode` composition tree. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode.https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.SubspaceLayoutModifierNode).invalidatePlacement()()` Requests a relayout of the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode` composition tree. |

## 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) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
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. |

### SubspaceLayoutModifierNode.invalidateMeasurement

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/SubspaceLayoutModifierNode.kt+function:invalidateMeasurement) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
fun SubspaceLayoutModifierNode.invalidateMeasurement(): Unit
```

Requests a remeasure of the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode` composition tree.

This is used to request a remeasure in stateful layout modifiers that are impacted by events that don't trigger a recomposition. *Do not* call this from `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)`.

### SubspaceLayoutModifierNode.invalidatePlacement

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/SubspaceLayoutModifierNode.kt+function:invalidatePlacement) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
fun SubspaceLayoutModifierNode.invalidatePlacement(): Unit
```

Requests a relayout of the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode` composition tree.

This is used to request a relayout in stateful layout modifiers that are impacted by events that don't trigger a recomposition. *Do not* call this from `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)`.