Interface

LayoutModifierNode

A [Modifier.

LayoutModifierNodeSample

@Composable
fun LayoutModifierNodeSample() {
    class VerticalPadding(var padding: Dp) : LayoutModifierNode, Modifier.Node() {
        override fun MeasureScope.measure(
            measurable: Measurable,
            constraints: Constraints,
        ): MeasureResult {
            val paddingPx = padding.roundToPx()
            val placeable = measurable.measure(constraints.offset(vertical = -paddingPx))
            return layout(placeable.width, placeable.height + paddingPx) {
                placeable.placeRelative(0, paddingPx)
            }
        }
    }
    data class VerticalPaddingElement(val padding: Dp) : ModifierNodeElement<VerticalPadding>() {
        override fun create() = VerticalPadding(padding)
        override fun update(node: VerticalPadding) {
            node.padding = padding
        }
        override fun InspectorInfo.inspectableProperties() {
            name = "verticalPadding"
            properties["padding"] = padding
        }
    }
    fun Modifier.verticalPadding(padding: Dp) = this then VerticalPaddingElement(padding)
    Box(Modifier.background(Color.Gray).verticalPadding(50.dp)) {
        Box(Modifier.fillMaxSize().background(Color.DarkGray))
    }
}