snapshotFlow 는 State를 Flow로 변환하기위해 사용한다.
Flow → State 로 변경하는 Flow.collectAsState()
와 반대되는 기능이다.
Flow.collectAsState()
: Flow → State
snapshotFlow()
: State → Flow
이렇게 State → Flow 로 변환하면, Flow의 다양한 연산자들을 사용하여 좀더 효율적인 코드를 구성할 수 있게된다.
snapshotFlow
는 collect
를 시작하면, 파라미터 블록을 실행하고 실행된 State
객체의 결과를 방출한다.
LazyColumn 에서 첫 번째 아이템이 스크롤로 인하여 가려지면, 특정 작업을 수행하는 예제
val listState = rememberLazyListState()
LazyColumn(state = listState) {
// ...
}
//listState 가 변경되면 내부 블럭이 실행된다.
LaunchedEffect(listState) {
//listState.firstVisiblerItemIndex는 Flow 연산자를 사용할수 있는 Flow로 변환된다.
snapshotFlow { listState.firstVisibleItemIndex }
.map { index -> index > 0 }
.distinctUntilChanged()
.filter { it == true }
.collect {
MyAnlyticsService.sendScrolledPastFirstItemEvent()
}
}