Class

ModifierNodeElement

A [Modifier.

ModifierNodeElementSample

@Composable
fun ModifierNodeElementSample() {
    class Circle(var color: Color) : DrawModifierNode, Modifier.Node() {
        override fun ContentDrawScope.draw() {
            drawCircle(color)
        }
    }
    data class CircleElement(val color: Color) : ModifierNodeElement<Circle>() {
        override fun create() = Circle(color)
        override fun update(node: Circle) {
            node.color = color
        }
        override fun InspectorInfo.inspectableProperties() {
            name = "circle"
            properties["color"] = color
        }
    }
    fun Modifier.circle(color: Color) = this then CircleElement(color)
}

SemanticsModifierNodeSample

@Suppress("LocalVariableName")
@Composable
fun SemanticsModifierNodeSample() {
    class HeadingNode : SemanticsModifierNode, Modifier.Node() {
        override fun SemanticsPropertyReceiver.applySemantics() {
            heading()
        }
    }
    val HeadingElement =
        object : ModifierNodeElement<HeadingNode>() {
            override fun create() = HeadingNode()
            override fun update(node: HeadingNode) {
                // Nothing to update.
            }
            override fun InspectorInfo.inspectableProperties() {
                name = "heading"
            }
            override fun hashCode(): Int = "heading".hashCode()
            override fun equals(other: Any?) = (other === this)
        }
    fun Modifier.heading() = this then HeadingElement
}