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
}