我想通过 Jetpack Compose 中的 LazyColumn 实现无限滚动,无需任何库。换句话说,当用户滚动到末尾时,我需要调用一个侦听器。
我使用了这个解决方案:
@Composable
inline fun LazyListState.scrollEndCallback(crossinline callback: () -> Unit) {
LaunchedEffect(key1 = this) {
snapshotFlow { layoutInfo }
.filter { it.totalItemsCount > 0 }
.map { it.totalItemsCount == (it.visibleItemsInfo.lastOrNull()?.index ?: -1).inc() }
.distinctUntilChanged()
.filter { it }
.onEach { callback() }
.collect()
}
}
其用途:
@Composable
fun Example() {
LazyColumn(
state = rememberLazyListState().also {
it.scrollEndCallback {
// do sth
}
},
) {
// items ....
}
}
也可以与
LazyGridState
重复使用