Представили новые модификторы для отслеживания видимости элементов:
onVisibilityChanged, onFirstVisibleПример использования:
// onVisibilityChanged
LazyColumn {
items(feedData) { video ->
VideoRow(
video,
Modifier.onVisibilityChanged(minDurationMs = 500, minFractionVisible = 1f) {
visible ->
if (visible) video.play() else video.pause()
},
)
}
}
// onFirstVisible
LazyColumn {
items(100) {
Box(
Modifier
// Log impressions when item has been visible for 500ms
.onFirstVisible(minDurationMs = 500) { /* log impression */ }
.clip(RoundedCornerShape(16.dp))
.drawBehind { drawRect(backgroundColor) }
.fillMaxWidth()
.height(100.dp)
)
}
}
До нового апи мы парсили стейт для получения того же функционала:
LaunchedEffect(listState) {
snapshotFlow { listState.layoutInfo.visibleItemsInfo.map { it.key }.toSet() }
.collect { visibleIds ->
// Сравнение с предыдущим состоянием и получение колбека
}
}Оффициальный анонс: https://android-developers.googleblog.com/2025/08/whats-new-in-jetpack-compose-august-25-release.html
В версии 1.9.2 поправили баг с пропавшими ивентами смены состояния