David Dupraz
06/28/2021, 6:49 PMDavid Dupraz
06/28/2021, 6:49 PMColumn {
Row { } //header row
Row {
LazyVerticalGrid {} //card with inputs
}
Row { } //the 3 last cards
}
David Dupraz
06/28/2021, 6:52 PMTimo Drick
06/29/2021, 2:00 PMTimo Drick
06/29/2021, 2:05 PMLazyColumn {
stickyHeader { ... }
items(FavoriteImages.values().toList().chunked(columns)) { columnList ->
Row {
for(item in columnList) {
...
}
}
}
item {
...
}
}
Timo Drick
06/29/2021, 2:06 PMinline fun <T> LazyListScope.gridItems(
columns: Int,
gridPadding: Dp = 0.dp,
contentPadding: PaddingValues = PaddingValues(),
items: List<T>,
crossinline itemContent: @Composable LazyItemScope.(item: T) -> Unit
) {
val chunkedItems = items.chunked(columns)
itemsIndexed(chunkedItems) { index, rowList ->
val layoutDirection = LocalLayoutDirection.current
val topPadding = if (index > 0) gridPadding else contentPadding.calculateTopPadding()
val startPadding = contentPadding.calculateLeftPadding(layoutDirection)
val endPadding = contentPadding.calculateEndPadding(layoutDirection)
val bottomPadding = contentPadding.calculateBottomPadding()
Row(Modifier.padding(top = topPadding, start = startPadding, bottom = bottomPadding, end = endPadding)) {
val rowModifier = Modifier.weight(1f)
rowList.forEachIndexed { index, item ->
if (index > 0) Spacer(Modifier.width(gridPadding))
Box(rowModifier) {
itemContent(item)
}
}
val emptyRows = (columns - rowList.size)
repeat(emptyRows) { // fill empty cells
Spacer(Modifier.width(gridPadding))
Spacer(modifier = rowModifier)
}
}
}
}