---
title: "onConsumedWindowInsetsChanged"
description: "Calls [block] with the [WindowInsets] that have been consumed, either by [consumeWindowInsets] or
one of the padding Modifiers, such as [imePadding].

[block] can be called before or during measurement and layout. It should not be used to trigger
changes to composition because composition will only be applied on the following frame, leading
to the UI lagging WindowInsets by a frame."
type: "modifier"
---

<div class='type'>Compose Modifier</div>

<a id='references'></a>
<div class='sourceset sourceset-common'>Common</div>


```kotlin
fun Modifier.onConsumedWindowInsetsChanged(block: (consumedWindowInsets: WindowInsets) -> Unit) =
    this then
        ConsumedInsetsModifierElement(
            block,
            debugInspectorInfo {
                name = "onConsumedWindowInsetsChanged"
                properties["block"] = block
            },
        )
```


Calls `block` with the `WindowInsets` that have been consumed, either by `consumeWindowInsets` or
one of the padding Modifiers, such as `imePadding`.

`block` can be called before or during measurement and layout. It should not be used to trigger
changes to composition because composition will only be applied on the following frame, leading
to the UI lagging WindowInsets by a frame.



## Code Examples
### withConsumedInsetsSample
```kotlin
@OptIn(ExperimentalLayoutApi::class)
fun withConsumedInsetsSample() {
    class SampleActivity : ComponentActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            WindowCompat.setDecorFitsSystemWindows(window, false)
            super.onCreate(savedInstanceState)
            setContent {
                val remainingInsets = remember { MutableWindowInsets() }
                val safeContent = WindowInsets.safeContent
                Box(
                    Modifier.navigationBarsPadding().onConsumedWindowInsetsChanged {
                        consumedWindowInsets ->
                        remainingInsets.insets = safeContent.exclude(consumedWindowInsets)
                    }
                ) {
                    // padding can be used without recomposition when insets change.
                    val padding = remainingInsets.asPaddingValues()
                    Box(Modifier.padding(padding))
                }
            }
        }
    }
}
```

