in benchmarks/showcases/LazyGridImageView/composeApp/src/commonMain/kotlin/org/jetbrains/lazygridimage/App.kt [30:123]
fun App() {
val gridState = rememberLazyGridState()
val coroutineScope = rememberCoroutineScope()
// State for auto-scrolling
var autoScroll by remember { mutableStateOf(false) }
var scrollingDown by remember { mutableStateOf(true) }
var currentIndex by remember { mutableStateOf(0) }
val uris = remember {
val availableResources: MutableList<String> = mutableListOf()
for (index in 1..999) {
try {
val resUri = Res.getUri("files/downloaded_image${index.toString().padStart(3, '0')}.jpg")
availableResources.add(resUri)
} catch (e: Exception) {
//ignore
}
}
List(999) { index ->
availableResources[index % availableResources.size]
}
}
val numOfColumns = 3
// Auto-scrolling effect
LaunchedEffect(autoScroll) {
if (autoScroll) {
while (true) {
delay(100)
if (scrollingDown) {
if (currentIndex < uris.size - numOfColumns - 1) {
currentIndex += numOfColumns
} else {
scrollingDown = false
}
} else {
if (currentIndex > 0) {
currentIndex -= numOfColumns
} else {
scrollingDown = true
}
}
coroutineScope.launch {
gridState.animateScrollToItem(
index = currentIndex,
)
}
}
}
}
MaterialTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
) {
// Checkbox for auto-scrolling
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(8.dp)
) {
Checkbox(
checked = autoScroll,
onCheckedChange = { autoScroll = it }
)
Spacer(modifier = Modifier.width(8.dp))
Text("Auto Scroll")
}
LazyVerticalGrid(
columns = GridCells.Fixed(numOfColumns),
contentPadding = PaddingValues(4.dp),
modifier = Modifier.fillMaxSize(),
state = gridState
) {
items(uris) { uri ->
ImageCard(
uri,
modifier = Modifier.padding(4.dp)
)
}
}
}
}
}
}