MutableWindowInsets

Class

Common
@ExperimentalLayoutApi
class MutableWindowInsets(initialInsets: WindowInsets = WindowInsets(0, 0, 0, 0)) : WindowInsets

A WindowInsets whose values can change without changing the instance. This is useful to avoid recomposition when WindowInsets can change.

Note: This API as experimental since it doesn't enforce the right consumption patterns.

Properties

Common
var insets

The WindowInsets that are used for left, top, right, and bottom values.

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