@@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.Row
3232import androidx.compose.foundation.layout.fillMaxSize
3333import androidx.compose.foundation.layout.fillMaxWidth
3434import androidx.compose.foundation.layout.height
35+ import androidx.compose.foundation.layout.padding
3536import androidx.compose.foundation.layout.size
3637import androidx.compose.foundation.layout.wrapContentHeight
3738import androidx.compose.foundation.lazy.LazyColumn
@@ -47,6 +48,8 @@ import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
4748import androidx.compose.foundation.lazy.staggeredgrid.items
4849import androidx.compose.foundation.rememberScrollState
4950import androidx.compose.foundation.verticalScroll
51+ import androidx.compose.material3.Card
52+ import androidx.compose.material3.CircularProgressIndicator
5053import androidx.compose.material3.Text
5154import androidx.compose.runtime.Composable
5255import androidx.compose.runtime.LaunchedEffect
@@ -67,11 +70,12 @@ import androidx.paging.compose.itemKey
6770import coil.compose.AsyncImage
6871import coil.compose.rememberAsyncImagePainter
6972import com.example.compose.snippets.util.randomSampleImageUrl
70- import kotlin.random.Random
7173import kotlinx.coroutines.flow.distinctUntilChanged
7274import kotlinx.coroutines.flow.filter
7375import kotlinx.coroutines.flow.map
7476import kotlinx.coroutines.launch
77+ import org.w3c.dom.Text
78+ import kotlin.random.Random
7579
7680private object ListsSnippetsColumn {
7781 // [START android_compose_layouts_list_column]
@@ -644,7 +648,9 @@ fun LazyStaggeredGridSnippet() {
644648 model = photo,
645649 contentScale = ContentScale .Crop ,
646650 contentDescription = null ,
647- modifier = Modifier .fillMaxWidth().wrapContentHeight()
651+ modifier = Modifier
652+ .fillMaxWidth()
653+ .wrapContentHeight()
648654 )
649655 }
650656 },
@@ -666,15 +672,17 @@ fun LazyStaggeredGridSnippetFixed() {
666672 model = photo,
667673 contentScale = ContentScale .Crop ,
668674 contentDescription = null ,
669- modifier = Modifier .fillMaxWidth().wrapContentHeight()
675+ modifier = Modifier
676+ .fillMaxWidth()
677+ .wrapContentHeight()
670678 )
671679 }
672680 },
673681 modifier = Modifier .fillMaxSize()
674682 )
675683 // [END android_compose_layouts_lazy_staggered_grid_fixed]
676684}
677- private class Message (val id : Long )
685+ class Message (val id : Long )
678686private class Item
679687
680688private data class Contact (val firstName : String )
@@ -742,3 +750,47 @@ private val randomSizedPhotos = listOf(
742750 randomSampleImageUrl(width = 1600 , height = 900 ),
743751 randomSampleImageUrl(width = 500 , height = 500 ),
744752)
753+ // [START android_compose_layouts_lazily_load_list]
754+ @Composable
755+ fun MessageList (pager : Pager <Int , Message >) {
756+ val lazyPagingItems = pager.flow.collectAsLazyPagingItems()
757+
758+ LazyColumn {
759+ items(
760+ lazyPagingItems.itemCount,
761+ key = lazyPagingItems.itemKey { it.id }
762+ ) { index ->
763+ val message = lazyPagingItems[index]
764+ if (message != null ) {
765+ MessageRow (message)
766+ } else {
767+ MessagePlaceholder ()
768+ }
769+ }
770+ }
771+
772+ @Composable
773+ fun MessagePlaceholder () {
774+ Box (
775+ Modifier
776+ .fillMaxWidth()
777+ .height(48 .dp)
778+ ) {
779+ CircularProgressIndicator ()
780+ }
781+ }
782+
783+ @Composable
784+ fun MessageRow (message : Text ) {
785+ Card (modifier = Modifier .padding(8 .dp)) {
786+ Column (
787+ modifier = Modifier .padding(8 .dp),
788+ verticalArrangement = Arrangement .Center
789+ ) {
790+ // Text(message.sender), where "message" is an object with a sender property
791+ // Text(message.text), where "text" is an object with a text property
792+ }
793+ }
794+ }
795+ }
796+ // [END android_compose_layouts_lazily_load_list]
0 commit comments