@@ -33,6 +33,7 @@ import androidx.compose.foundation.layout.Row
33
33
import androidx.compose.foundation.layout.fillMaxSize
34
34
import androidx.compose.foundation.layout.fillMaxWidth
35
35
import androidx.compose.foundation.layout.height
36
+ import androidx.compose.foundation.layout.padding
36
37
import androidx.compose.foundation.layout.size
37
38
import androidx.compose.foundation.layout.width
38
39
import androidx.compose.foundation.layout.wrapContentHeight
@@ -52,6 +53,8 @@ import androidx.compose.foundation.lazy.staggeredgrid.items
52
53
import androidx.compose.foundation.rememberScrollState
53
54
import androidx.compose.foundation.verticalScroll
54
55
import androidx.compose.material3.Button
56
+ import androidx.compose.material3.Card
57
+ import androidx.compose.material3.CircularProgressIndicator
55
58
import androidx.compose.material3.Text
56
59
import androidx.compose.runtime.Composable
57
60
import androidx.compose.runtime.LaunchedEffect
@@ -78,6 +81,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
78
81
import kotlinx.coroutines.flow.filter
79
82
import kotlinx.coroutines.flow.map
80
83
import kotlinx.coroutines.launch
84
+ import org.w3c.dom.Text
81
85
82
86
private object ListsSnippetsColumn {
83
87
// [START android_compose_layouts_list_column]
@@ -684,7 +688,7 @@ fun LazyStaggeredGridSnippetFixed() {
684
688
)
685
689
// [END android_compose_layouts_lazy_staggered_grid_fixed]
686
690
}
687
- private class Message (val id : Long )
691
+ class Message (val id : Long , val sender : String , val text : String )
688
692
private class Item
689
693
690
694
private data class Contact (val firstName : String )
@@ -752,6 +756,55 @@ private val randomSizedPhotos = listOf(
752
756
randomSampleImageUrl(width = 1600 , height = 900 ),
753
757
randomSampleImageUrl(width = 500 , height = 500 ),
754
758
)
759
+ // [START android_compose_layouts_lazily_load_list]
760
+ @Composable
761
+ fun MessageList (
762
+ modifier : Modifier ,
763
+ pager : Pager <Int , Message >
764
+ ) {
765
+ val lazyPagingItems = pager.flow.collectAsLazyPagingItems()
766
+
767
+ LazyColumn {
768
+ items(
769
+ lazyPagingItems.itemCount,
770
+ key = lazyPagingItems.itemKey { it.id }
771
+ ) { index ->
772
+ val message = lazyPagingItems[index]
773
+ if (message != null ) {
774
+ MessageRow (message)
775
+ } else {
776
+ MessagePlaceholder ()
777
+ }
778
+ }
779
+ }
780
+ @Composable
781
+ fun MessagePlaceholder (modifier : Modifier ) {
782
+ Box (
783
+ Modifier
784
+ .fillMaxWidth()
785
+ .height(48 .dp)
786
+ ) {
787
+ CircularProgressIndicator ()
788
+ }
789
+ }
790
+
791
+ @Composable
792
+ fun MessageRow (
793
+ modifier : Modifier ,
794
+ message : Message
795
+ ) {
796
+ Card (modifier = Modifier .padding(8 .dp)) {
797
+ Column (
798
+ modifier = Modifier .padding(8 .dp),
799
+ verticalArrangement = Arrangement .Center
800
+ ) {
801
+ Text (message.sender)
802
+ Text (message.text)
803
+ }
804
+ }
805
+ }
806
+ }
807
+ // [END android_compose_layouts_lazily_load_list]
755
808
756
809
// [START android_compose_lists_snap_scroll_button]
757
810
@Composable
0 commit comments