# FocusRequesterModifierNode

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/focus/FocusRequesterModifierNode.kt+class:androidx.compose.ui.focus.FocusRequesterModifierNode) Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.4.0) Common/All
- Cmn

  ```
  interface FocusRequesterModifierNode : DelegatableNode
  ```

*** ** * ** ***

Implement this interface to create a modifier node that can be used to request changes in the focus state of a `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusTargetNode` down the hierarchy.

## Summary

| ### Extension functions |
|---|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode.https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode#(androidx.compose.ui.focus.FocusRequesterModifierNode).captureFocus()()` Deny requests to clear focus. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode.https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode#(androidx.compose.ui.focus.FocusRequesterModifierNode).freeFocus()()` Use this function to send a request to free focus when one of the components associated with this `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequester` is in a Captured state. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode.https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode#(androidx.compose.ui.focus.FocusRequesterModifierNode).requestFocus()()` Use this function to request focus. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode.https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode#(androidx.compose.ui.focus.FocusRequesterModifierNode).restoreFocusedChild()()` Use this function to restore focus to one of the children of the node pointed to by this `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequester`. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode.https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequesterModifierNode#(androidx.compose.ui.focus.FocusRequesterModifierNode).saveFocusedChild()()` Use this function to request the focus target to save a reference to the currently focused child in its saved instance state. | Cmn |

### Inherited functions

From [androidx.compose.ui.node.DelegatableNode](https://developer.android.com/reference/kotlin/androidx/compose/ui/node/DelegatableNode) `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/annotation/EmptySuper
https://developer.android.com/reference/kotlin/androidx/compose/ui/node/DelegatableNode#onDensityChange()()`

Invoked when the density changes for this node.
Cmn `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/annotation/EmptySuper
https://developer.android.com/reference/kotlin/androidx/compose/ui/node/DelegatableNode#onLayoutDirectionChange()()`

Invoked when the layout direction changes for this node.
Cmn

### Inherited properties

From [androidx.compose.ui.node.DelegatableNode](https://developer.android.com/reference/kotlin/androidx/compose/ui/node/DelegatableNode) `https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node` `https://developer.android.com/reference/kotlin/androidx/compose/ui/node/DelegatableNode#node()`

A reference of the `https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node` that holds this node's position in the node hierarchy.
Cmn

## Extension functions

### FocusRequesterModifierNode.captureFocus

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/focus/FocusRequesterModifierNode.kt+function:captureFocus)

```
fun FocusRequesterModifierNode.captureFocus(): Boolean
```

Deny requests to clear focus.

Use this function to send a request to capture focus. If a component captures focus, it will send a `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusState` object to its associated `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/onFocusChanged.modifier#(androidx.compose.ui.Modifier).onFocusChanged(kotlin.Function1)` modifiers where [FocusState.isCaptured]() == true.

When a component is in a Captured state, all focus requests from other components are declined.

```kotlin
import androidx.compose.foundation.border
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Color.Companion.Red
import androidx.compose.ui.graphics.Color.Companion.Transparent
import androidx.compose.ui.unit.dp

val focusRequester = remember { FocusRequester() }
var value by remember { mutableStateOf("apple") }
var borderColor by remember { mutableStateOf(Transparent) }
TextField(
    value = value,
    onValueChange = {
        value = it.apply {
            if (length > 5) focusRequester.captureFocus() else focusRequester.freeFocus()
        }
    },
    modifier =
        Modifier.border(2.dp, borderColor).focusRequester(focusRequester).onFocusChanged {
            borderColor = if (it.isCaptured) Red else Transparent
        },
)
```

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | true if the focus was successfully captured by one of the `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/focusTarget.modifier#(androidx.compose.ui.Modifier).focusTarget()` modifiers associated with this `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequester`. False otherwise. |

### FocusRequesterModifierNode.freeFocus

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/focus/FocusRequesterModifierNode.kt+function:freeFocus)

```
fun FocusRequesterModifierNode.freeFocus(): Boolean
```

Use this function to send a request to free focus when one of the components associated with this `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequester` is in a Captured state. If a component frees focus, it will send a `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusState` object to its associated `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/onFocusChanged.modifier#(androidx.compose.ui.Modifier).onFocusChanged(kotlin.Function1)` modifiers where [FocusState.isCaptured]() == false.

When a component is in a Captured state, all focus requests from other components are declined. .

```kotlin
import androidx.compose.foundation.border
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Color.Companion.Red
import androidx.compose.ui.graphics.Color.Companion.Transparent
import androidx.compose.ui.unit.dp

val focusRequester = remember { FocusRequester() }
var value by remember { mutableStateOf("apple") }
var borderColor by remember { mutableStateOf(Transparent) }
TextField(
    value = value,
    onValueChange = {
        value = it.apply {
            if (length > 5) focusRequester.captureFocus() else focusRequester.freeFocus()
        }
    },
    modifier =
        Modifier.border(2.dp, borderColor).focusRequester(focusRequester).onFocusChanged {
            borderColor = if (it.isCaptured) Red else Transparent
        },
)
```

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | true if the captured focus was successfully released. i.e. At the end of this operation, one of the components associated with this `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/focusRequester.modifier#(androidx.compose.ui.Modifier).focusRequester(androidx.compose.ui.focus.FocusRequester)` freed focus. |

### FocusRequesterModifierNode.requestFocus

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/focus/FocusRequesterModifierNode.kt+function:requestFocus)

```
fun FocusRequesterModifierNode.requestFocus(): Boolean
```

Use this function to request focus. If the system grants focus to a component associated with this `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequester`, its `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/onFocusChanged.modifier#(androidx.compose.ui.Modifier).onFocusChanged(kotlin.Function1)` modifiers will receive a `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusState` object where `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusState#isFocused()` is true.

```kotlin
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.focusable
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.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Color.Companion.Black
import androidx.compose.ui.graphics.Color.Companion.Green
import androidx.compose.ui.unit.dp

val focusRequester = remember { FocusRequester() }
var color by remember { mutableStateOf(Black) }
Box(
    Modifier.clickable { focusRequester.requestFocus() }
        .border(2.dp, color)
        // The focusRequester should be added BEFORE the focusable.
        .focusRequester(focusRequester)
        // The onFocusChanged should be added BEFORE the focusable that is being observed.
        .onFocusChanged { color = if (it.isFocused) Green else Black }
        .focusable()
)
```

### FocusRequesterModifierNode.restoreFocusedChild

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/focus/FocusRequesterModifierNode.kt+function:restoreFocusedChild)

```
fun FocusRequesterModifierNode.restoreFocusedChild(): Boolean
```

Use this function to restore focus to one of the children of the node pointed to by this `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/FocusRequester`. This restores focus to a previously focused child that was saved by using `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/package-summary#(androidx.compose.ui.focus.FocusRequesterModifierNode).saveFocusedChild()`.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | true if we successfully restored focus to one of the children of the `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/focusTarget.modifier#(androidx.compose.ui.Modifier).focusTarget()` associated with this node. |

### FocusRequesterModifierNode.saveFocusedChild

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/focus/FocusRequesterModifierNode.kt+function:saveFocusedChild)

```
fun FocusRequesterModifierNode.saveFocusedChild(): Boolean
```

Use this function to request the focus target to save a reference to the currently focused child in its saved instance state. After calling this, focus can be restored to the saved child by making a call to `https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/package-summary#(androidx.compose.ui.focus.FocusRequesterModifierNode).restoreFocusedChild()`.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | true if the focus target associated with this node has a focused child and we successfully saved a reference to it. |