@@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.Row
32
32
import androidx.compose.foundation.layout.fillMaxSize
33
33
import androidx.compose.foundation.layout.fillMaxWidth
34
34
import androidx.compose.foundation.layout.height
35
+ import androidx.compose.foundation.layout.padding
35
36
import androidx.compose.foundation.layout.size
36
37
import androidx.compose.foundation.layout.wrapContentHeight
37
38
import androidx.compose.foundation.lazy.LazyColumn
@@ -47,6 +48,8 @@ import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
47
48
import androidx.compose.foundation.lazy.staggeredgrid.items
48
49
import androidx.compose.foundation.rememberScrollState
49
50
import androidx.compose.foundation.verticalScroll
51
+ import androidx.compose.material3.Card
52
+ import androidx.compose.material3.CircularProgressIndicator
50
53
import androidx.compose.material3.Text
51
54
import androidx.compose.runtime.Composable
52
55
import androidx.compose.runtime.LaunchedEffect
@@ -67,11 +70,12 @@ import androidx.paging.compose.itemKey
67
70
import coil.compose.AsyncImage
68
71
import coil.compose.rememberAsyncImagePainter
69
72
import com.example.compose.snippets.util.randomSampleImageUrl
70
- import kotlin.random.Random
71
73
import kotlinx.coroutines.flow.distinctUntilChanged
72
74
import kotlinx.coroutines.flow.filter
73
75
import kotlinx.coroutines.flow.map
74
76
import kotlinx.coroutines.launch
77
+ import org.w3c.dom.Text
78
+ import kotlin.random.Random
75
79
76
80
private object ListsSnippetsColumn {
77
81
// [START android_compose_layouts_list_column]
@@ -644,7 +648,9 @@ fun LazyStaggeredGridSnippet() {
644
648
model = photo,
645
649
contentScale = ContentScale .Crop ,
646
650
contentDescription = null ,
647
- modifier = Modifier .fillMaxWidth().wrapContentHeight()
651
+ modifier = Modifier
652
+ .fillMaxWidth()
653
+ .wrapContentHeight()
648
654
)
649
655
}
650
656
},
@@ -666,15 +672,17 @@ fun LazyStaggeredGridSnippetFixed() {
666
672
model = photo,
667
673
contentScale = ContentScale .Crop ,
668
674
contentDescription = null ,
669
- modifier = Modifier .fillMaxWidth().wrapContentHeight()
675
+ modifier = Modifier
676
+ .fillMaxWidth()
677
+ .wrapContentHeight()
670
678
)
671
679
}
672
680
},
673
681
modifier = Modifier .fillMaxSize()
674
682
)
675
683
// [END android_compose_layouts_lazy_staggered_grid_fixed]
676
684
}
677
- private class Message (val id : Long )
685
+ class Message (val id : Long )
678
686
private class Item
679
687
680
688
private data class Contact (val firstName : String )
@@ -742,3 +750,47 @@ private val randomSizedPhotos = listOf(
742
750
randomSampleImageUrl(width = 1600 , height = 900 ),
743
751
randomSampleImageUrl(width = 500 , height = 500 ),
744
752
)
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