Compose Modifier

onFirstVisible

Registers a callback to monitor when the node is first inside of the viewport of the window or not.

OnFirstVisibleImpressionLoggingSample

@Suppress("DEPRECATION")
@Composable
fun OnFirstVisibleImpressionLoggingSample() {
    @Composable
    fun VideoFeed(feedData: List<Video>, logger: Logger) {
        LazyColumn {
            items(feedData) { video ->
                VideoRow(
                    video,
                    Modifier.onFirstVisible(minDurationMs = 500, minFractionVisible = 1f) {
                        logger.logImpression(video.id)
                    },
                )
            }
        }
    }
}

OnFirstVisibleImpressionLoggingWithViewportSample

@Suppress("DEPRECATION")
@Composable
fun OnFirstVisibleImpressionLoggingWithViewportSample() {
    @Composable
    fun VideoFeed(feedData: List<Video>, logger: Logger) {
        val viewport = remember { LayoutBoundsHolder() }
        LazyColumn(Modifier.layoutBounds(viewport)) {
            items(feedData) { video ->
                VideoRow(
                    video,
                    Modifier.onFirstVisible(
                        minDurationMs = 500,
                        minFractionVisible = 1f,
                        viewportBounds = viewport,
                    ) {
                        logger.logImpression(video.id)
                    },
                )
            }
        }
    }
}