onConsumedWindowInsetsChanged
Compose Modifier
Common
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
@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))
}
}
}
}
}