Optimize lazy column
This commit is contained in:
committed by
Benoit Marty
parent
4ddf216bee
commit
89224744e5
@@ -10,7 +10,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
@@ -230,7 +230,11 @@ fun TimelineItems(
|
||||
verticalArrangement = Arrangement.Bottom,
|
||||
reverseLayout = true
|
||||
) {
|
||||
itemsIndexed(timelineItems) { index, timelineItem ->
|
||||
items(
|
||||
items = timelineItems,
|
||||
contentType = { timelineItem -> timelineItem.contentType() },
|
||||
key = { timelineItem -> timelineItem.key() },
|
||||
) { timelineItem ->
|
||||
TimelineItemRow(
|
||||
timelineItem = timelineItem,
|
||||
onClick = onClick,
|
||||
@@ -245,6 +249,20 @@ fun TimelineItems(
|
||||
}
|
||||
}
|
||||
|
||||
private fun MessagesTimelineItemState.key(): String {
|
||||
return when (this) {
|
||||
is MessagesTimelineItemState.MessageEvent -> id
|
||||
is MessagesTimelineItemState.Virtual -> id
|
||||
}
|
||||
}
|
||||
|
||||
private fun MessagesTimelineItemState.contentType(): Int {
|
||||
return when (this) {
|
||||
is MessagesTimelineItemState.MessageEvent -> 0
|
||||
is MessagesTimelineItemState.Virtual -> 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Composable
|
||||
fun TimelineItemRow(
|
||||
|
||||
@@ -122,7 +122,11 @@ fun RoomListContent(
|
||||
.nestedScroll(nestedScrollConnection),
|
||||
state = lazyListState,
|
||||
) {
|
||||
items(roomSummaries) { room ->
|
||||
items(
|
||||
items = roomSummaries,
|
||||
contentType = { room -> room.contentType() },
|
||||
key = { room -> room.key() },
|
||||
) { room ->
|
||||
RoomSummaryRow(room = room, onClick = ::onRoomClicked)
|
||||
}
|
||||
}
|
||||
@@ -134,6 +138,9 @@ fun RoomListContent(
|
||||
}
|
||||
}
|
||||
|
||||
private fun RoomListRoomSummary.key() = id
|
||||
private fun RoomListRoomSummary.contentType() = isPlaceholder
|
||||
|
||||
private fun LazyListState.isScrolled(): Boolean {
|
||||
return firstVisibleItemIndex > 0 || firstVisibleItemScrollOffset > 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user