Interface

ModifierLocalModifierNode

A [androidx.

JustReadingOrProvidingModifierLocalNodeSample

@Composable
fun JustReadingOrProvidingModifierLocalNodeSample() {
    class Logger {
        fun log(string: String) {
            println(string)
        }
    }
    val loggerLocal = modifierLocalOf { Logger() }
    class ProvideLoggerNode(logger: Logger) : ModifierLocalModifierNode, Modifier.Node() {
        override val providedValues = modifierLocalMapOf(loggerLocal to logger)
    }
    data class ProvideLoggerElement(val logger: Logger) : ModifierNodeElement<ProvideLoggerNode>() {
        override fun create() = ProvideLoggerNode(logger)
        override fun update(node: ProvideLoggerNode) {
            node.provide(loggerLocal, logger)
        }
        override fun InspectorInfo.inspectableProperties() {
            name = "provideLogger"
            properties["logger"] = logger
        }
    }
    class SizeLoggerNode(var id: String) :
        ModifierLocalModifierNode, LayoutAwareModifierNode, Modifier.Node() {
        override fun onRemeasured(size: IntSize) {
            loggerLocal.current.log("The size of $id was $size")
        }
    }
    data class SizeLoggerElement(val id: String) : ModifierNodeElement<SizeLoggerNode>() {
        override fun create() = SizeLoggerNode(id)
        override fun update(node: SizeLoggerNode) {
            node.id = id
        }
        override fun InspectorInfo.inspectableProperties() {
            name = "logSize"
            properties["id"] = id
        }
    }
    fun Modifier.logSize(id: String) = this then SizeLoggerElement(id)
    fun Modifier.provideLogger(logger: Logger) = this then ProvideLoggerElement(logger)
}