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