Daniel Okanin
05/24/2022, 2:48 PMDaniel Okanin
05/24/2022, 2:49 PMfun Modifier.pagination(
state: LazyListState,
buffer: Int = 10,
onEndReached: () -> Unit,
) = composed {
require(buffer >= 0) { "buffer cannot be negative, but was $buffer" }
val shouldLoadMore = remember {
derivedStateOf {
val lastVisibleItem = state.layoutInfo.visibleItemsInfo.lastOrNull() ?: return@derivedStateOf false
lastVisibleItem.index >= state.layoutInfo.totalItemsCount - 1 - buffer
}
}
LaunchedEffect(shouldLoadMore) {
snapshotFlow { shouldLoadMore.value }
.collect { shouldLoadMore ->
if (shouldLoadMore) onEndReached()
}
}
this
}
Daniel Okanin
05/24/2022, 2:51 PMRavi
05/24/2022, 3:09 PM@Composable
fun Pagination(
listState: LazyListState,
buffer: Int = 5,
flag: Boolean = true,
action: () -> Unit
) {
var lastTotalItems = -1
val loadMore = remember {
derivedStateOf {
val layoutInfo = listState.layoutInfo
val totalItemsNumber = layoutInfo.totalItemsCount
val lastVisibleItemIndex = (layoutInfo.visibleItemsInfo.lastOrNull()?.index ?: 0) + 1
val loadMore =
lastVisibleItemIndex > (totalItemsNumber - buffer) && flag && (lastTotalItems != totalItemsNumber)
loadMore
}
}
LaunchedEffect(loadMore) {
snapshotFlow { loadMore.value }
.distinctUntilChanged()
.collect {
if (it) {
lastTotalItems = listState.layoutInfo.totalItemsCount
action()
}
}
}
}
can u try this, u can ignore flag
argument.Daniel Okanin
05/24/2022, 4:13 PMDaniel Okanin
05/24/2022, 9:45 PM