# androidx.compose.ui.modifier

Common/All

## Interfaces

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalConsumer` | A Modifier that can be used to consume `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal`s that were provided by other modifiers to the left of this modifier, or above this modifier in the layout tree. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalModifierNode` | A `https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node` that is capable of consuming and providing `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal` values. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalProvider` | A Modifier that can be used to provide `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal`s that can be read by other modifiers to the right of this modifier, or modifiers that are children of the layout node that this modifier is attached to. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalReadScope` | This scope gives us access to modifier locals that are provided by other modifiers to the left of this modifier, or above this modifier in the layout tree. | Cmn |

## Classes

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal`s provide a means of inter-modifier communication. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` | An opaque key-value holder of `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal`s to be used with `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalModifierNode`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ProvidableModifierLocal` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ProvidableModifierLocal`s are `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal`s that can be used to provide values using a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalProvider`. | Cmn |

## Modifiers

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/modifierLocalConsumer.modifier` | A Modifier that can be used to consume `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal`s that were provided by other modifiers to the left of this modifier, or above this modifier in the layout tree. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/modifierLocalProvider.modifier` | A Modifier that can be used to provide `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal`s that can be read by other modifiers to the right of this modifier, or modifiers that are children of the layout node that this modifier is attached to. | Cmn |

## Top-level functions summary

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalMapOf()()` Creates an empty `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` | `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalMapOf(kotlin.Pair)(entry: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-pair/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<T>, T>)` Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with a single key and value. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` | `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal)(key: https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<T>)` Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with a single key and value initialized to null. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalMapOf(kotlin.Pair,kotlin.Pair,kotlin.Array)( entry1: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-pair/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<*>, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html>, entry2: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-pair/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<*>, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html>, vararg entries: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-pair/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<*>, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html> )` Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with multiple keys and values. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal,androidx.compose.ui.modifier.ModifierLocal,kotlin.Array)( key1: https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<*>, key2: https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<*>, vararg keys: https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal<*> )` Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with several keys, all initialized with values of null | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ProvidableModifierLocal<T>` | `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalOf(kotlin.Function0)(defaultFactory: () -> T)` Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ProvidableModifierLocal` and specifies a default factory. | Cmn |

## Top-level functions

### modifierLocalMapOf

Cmn Artifact: [androidx.compose.ui:ui](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/modifier/ModifierLocalModifierNode.kt+function:modifierLocalMapOf) Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.5.0)

```
fun modifierLocalMapOf(): ModifierLocalMap
```

Creates an empty `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap`

### modifierLocalMapOf

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

```
fun <T : Any?> modifierLocalMapOf(entry: Pair<ModifierLocal<T>, T>): ModifierLocalMap
```

Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with a single key and value. The provided `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalMapOf(kotlin.Pair)` should have Pair::first be the `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal` key, and the Pair::second be the corresponding value.

### modifierLocalMapOf

Cmn Artifact: [androidx.compose.ui:ui](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/modifier/ModifierLocalModifierNode.kt+function:modifierLocalMapOf) Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.5.0)

```
fun <T : Any?> modifierLocalMapOf(key: ModifierLocal<T>): ModifierLocalMap
```

Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with a single key and value initialized to null.

### modifierLocalMapOf

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

```
fun modifierLocalMapOf(
    entry1: Pair<ModifierLocal<*>, Any>,
    entry2: Pair<ModifierLocal<*>, Any>,
    vararg entries: Pair<ModifierLocal<*>, Any>
): ModifierLocalMap
```

Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with multiple keys and values. The provided `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/package-summary#modifierLocalMapOf(kotlin.Pair,kotlin.Pair,kotlin.Array)` should have each item's Pair::first be the `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal` key, and the Pair::second be the corresponding value.

### modifierLocalMapOf

Cmn Artifact: [androidx.compose.ui:ui](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/modifier/ModifierLocalModifierNode.kt+function:modifierLocalMapOf) Added in [1.7.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.7.0)

```
fun modifierLocalMapOf(
    key1: ModifierLocal<*>,
    key2: ModifierLocal<*>,
    vararg keys: ModifierLocal<*>
): ModifierLocalMap
```

Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocalMap` with several keys, all initialized with values of null

### modifierLocalOf

Cmn Artifact: [androidx.compose.ui:ui](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/modifier/ModifierLocal.kt+function:modifierLocalOf) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.1.0)

```
fun <T : Any?> modifierLocalOf(defaultFactory: () -> T): ProvidableModifierLocal<T>
```

Creates a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ProvidableModifierLocal` and specifies a default factory.

```kotlin
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.modifier.modifierLocalConsumer
import androidx.compose.ui.modifier.modifierLocalOf
import androidx.compose.ui.modifier.modifierLocalProvider

// Define the type of data.
val ModifierLocalMessage = modifierLocalOf { "Unknown" }

Box(
    Modifier
        // Provide an instance associated with the data type.
        .modifierLocalProvider(ModifierLocalMessage) { "World" }
        .composed {
            var message by remember { mutableStateOf("") }
            Modifier
                // Use the data type to read the message.
                .modifierLocalConsumer { message = ModifierLocalMessage.current }
                .clickable { println("Hello $message") }
        }
)
```

Sample 2: Modifier sending a message to another to its left.

```kotlin
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.modifier.modifierLocalConsumer
import androidx.compose.ui.modifier.modifierLocalOf
import androidx.compose.ui.modifier.modifierLocalProvider

class Sender(val onMessageReceived: (String) -> Unit) {
    fun sendMessage(message: String) {
        onMessageReceived(message)
    }
}

// Define the type of data.
val ModifierLocalSender = modifierLocalOf<Sender> { error("No sender provided by parent.") }

Box(
    Modifier
        // Provide an instance associated with the sender type.
        .modifierLocalProvider(ModifierLocalSender) {
            Sender { println("Message Received: $it") }
        }
        .composed {
            var sender by remember { mutableStateOf<Sender?>(null) }
            Modifier
                // Use the sender type to fetch an instance.
                .modifierLocalConsumer { sender = ModifierLocalSender.current }
                // Use this instance to send a message to the parent.
                .clickable { sender?.sendMessage("Hello World") }
        }
)
```

Here are examples where a modifier can communicate with another across layout nodes:

Sample 1: Modifier sending a message to a modifier on a child layout node.

```kotlin
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.modifier.modifierLocalConsumer
import androidx.compose.ui.modifier.modifierLocalOf
import androidx.compose.ui.modifier.modifierLocalProvider

// Define the type of data.
val ModifierLocalMessage = modifierLocalOf { "Unknown" }

Box(
    // Provide an instance associated with the data type.
    Modifier.modifierLocalProvider(ModifierLocalMessage) { "World" }
) {
    var message by remember { mutableStateOf("") }
    Box(
        Modifier
            // Use the data type to read the message.
            .modifierLocalConsumer { message = ModifierLocalMessage.current }
            .clickable { println("Hello $message") }
    )
}
```

Sample 2: Modifier sending a message to a modifier on a parent layout node.

```kotlin
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.modifier.modifierLocalConsumer
import androidx.compose.ui.modifier.modifierLocalOf
import androidx.compose.ui.modifier.modifierLocalProvider

class Sender(val onMessageReceived: (String) -> Unit) {
    fun sendMessage(message: String) {
        onMessageReceived(message)
    }
}

// Define the type of data.
val ModifierLocalSender = modifierLocalOf<Sender> { error("No sender provided by parent.") }

Box(
    Modifier
        // Provide an instance associated with the sender type.
        .modifierLocalProvider(ModifierLocalSender) {
            Sender { println("Message Received: $it") }
        }
) {
    var sender by remember { mutableStateOf<Sender?>(null) }
    Box(
        Modifier
            // Use the sender type to fetch an instance.
            .modifierLocalConsumer { sender = ModifierLocalSender.current }
            // Use this instance to send a message to the parent.
            .clickable { sender?.sendMessage("Hello World") }
    )
}
```

| Parameters |
|---|---|
| `defaultFactory: () -> T` | a factory to create a default value in cases where a `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal` is consumed without a Provider. If this is a situation you would rather not handle, you can throw an error in this factory. Here are examples where a modifier can communicate with another in the same modifier chain: Sample 1: Modifier sending a message to another to its right. |

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ProvidableModifierLocal` |   |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/ModifierLocal` |   |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/modifierLocalProvider.modifier#(androidx.compose.ui.Modifier).modifierLocalProvider(androidx.compose.ui.modifier.ProvidableModifierLocal,kotlin.Function0)` |   |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/modifier/modifierLocalConsumer.modifier#(androidx.compose.ui.Modifier).modifierLocalConsumer(kotlin.Function1)` |   |