Function

movableContentOf

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

MovableContentColumnRowSample

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

    if (vertical) {
        Column { movableContent() }
    } else {
        Row { movableContent() }
    }
}

MovableContentMultiColumnSample

@Suppress("unused")
@Sampled
@Composable
fun MovableContentMultiColumnSample(items: List<Item>) {
    val itemMap = remember { mutableMapOf<Item, @Composable () -> Unit>() }
    val movableItems =
        remember(items) {
            val itemsToRemove = itemMap.keys.toMutableSet()
            val movableItems = items.map { item ->
                itemsToRemove.remove(item)
                itemMap.getOrPut(item) { movableContentOf { ItemView(item) } }
            }
            itemsToRemove.forEach { itemMap.remove(it) }
            movableItems
        }

    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]()
                }
            }
        }
    }
}
Jetpack Compose beyond MaterialFree components, screens and templates for apps that don’t look like Google’s. Copy them into your app, or let your coding agent add them.Browse for free

Content updated: