fun App()

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)
                        )
                    }
                }
            }
        }
    }
}