onConsumedWindowInsetsChanged

Compose Modifier

Common
fun Modifier.onConsumedWindowInsetsChanged(block: (consumedWindowInsets: WindowInsets) -> Unit) =
    if (ComposeFoundationLayoutFlags.isWindowInsetsModifierLocalNodeImplementationEnabled)
        this then
            ConsumedInsetsModifierElement(
                block,
                debugInspectorInfo {
                    name = "onConsumedWindowInsetsChanged"
                    properties["block"] = block
                },
            )
    else
        composed(
            debugInspectorInfo {
                name = "onConsumedWindowInsetsChanged"
                properties["block"] = block
            }
        ) {
            remember(block) { ConsumedInsetsModifier(block) }
        }

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

Code Examples

withConsumedInsetsSample

@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))
                }
            }
        }
    }
}