movableContentWithReceiverOf

Function

Common
@RememberInComposition
public fun <R> movableContentWithReceiverOf(
    content: @Composable R.() -> Unit
): @Composable R.() -> Unit

Convert a lambda with a receiver into one that moves the remembered state and nodes created in a previous call to the new location it is called.

Tracking compositions can be used to produce a composable that moves its content between a row and a column based on a parameter, such as,

Or they can be used to ensure the composition state tracks with a model as moves in the layout, such as,

Parameters

contentThe composable lambda to convert into a state tracking lambda.

Returns

A tracking composable lambda
Common
@RememberInComposition
public fun <R, P> movableContentWithReceiverOf(
    content: @Composable R.(P) -> Unit
): @Composable R.(P) -> Unit

Convert a lambda with a receiver into one that moves the remembered state and nodes created in a previous call to the new location it is called.

Tracking compositions can be used to produce a composable that moves its content between a row and a column based on a parameter, such as,

Or they can be used to ensure the composition state tracks with a model as moves in the layout, such as,

Parameters

contentThe composable lambda to convert into a state tracking lambda.

Returns

A tracking composable lambda
Common
@RememberInComposition
public fun <R, P1, P2> movableContentWithReceiverOf(
    content: @Composable R.(P1, P2) -> Unit
): @Composable R.(P1, P2) -> Unit

Convert a lambda with a receiver into one that moves the remembered state and nodes created in a previous call to the new location it is called.

Tracking compositions can be used to produce a composable that moves its content between a row and a column based on a parameter, such as,

Or they can be used to ensure the composition state tracks with a model as moves in the layout, such as,

Parameters

contentThe composable lambda to convert into a state tracking lambda.

Returns

A tracking composable lambda
Common
@RememberInComposition
public fun <R, P1, P2, P3> movableContentWithReceiverOf(
    content: @Composable R.(P1, P2, P3) -> Unit
): @Composable R.(P1, P2, P3) -> Unit

Convert a lambda with a receiver into one that moves the remembered state and nodes created in a previous call to the new location it is called.

Tracking compositions can be used to produce a composable that moves its content between a row and a column based on a parameter, such as,

Or they can be used to ensure the composition state tracks with a model as moves in the layout, such as,

Parameters

contentThe composable lambda to convert into a state tracking lambda.

Returns

A tracking composable lambda

Code Examples

MovableContentColumnRowSample

@Suppress("unused")
@Composable
fun MovableContentColumnRowSample(content: @Composable () -> Unit, vertical: Boolean) {
    val movableContent = remember(content) { movableContentOf(content) }
    if (vertical) {
        Column { movableContent() }
    } else {
        Row { movableContent() }
    }
}

MovableContentMultiColumnSample

@Suppress("unused")
@Composable
fun MovableContentMultiColumnSample(items: List<Item>) {
    val itemMap = remember { mutableMapOf<Item, @Composable () -> Unit>() }
    val movableItems =
        items.map { item -> itemMap.getOrPut(item) { movableContentOf { ItemView(item) } } }
    val itemsPerColumn = 10
    val columns = items.size / itemsPerColumn + (if (items.size % itemsPerColumn == 0) 0 else 1)
    Row {
        repeat(columns) { column ->
            Column {
                val base = column * itemsPerColumn
                val end = minOf(base + itemsPerColumn, items.size)
                for (index in base until end) {
                    movableItems[index]()
                }
            }
        }
    }
}