⭐️ 스크롤 위치에 반응(rememberLazyListState)

LazyColumn : 항목을 스크롤 하면 항목이 컴포지션을 완전히 종료해서 데이터가 날아간다.

→ rememberSaveable을 통해 상태를 유지 시켜주자.

@Composable
fun LazyColumn(
...
    state: LazyListState = rememberLazyListState(),
...

-> rememberLazyListState는 rememberSaveable을 사용하여 목록의 초기 상태를 만든다.

많은 앱이 스크롤 위치, 항목 레이아웃 변경사항, 목록의 상태와 관련된 기타 이벤트에 반응하고 
이를 수신 대기해야 합니다. 
LazyColumn 또는 LazyRow와 같은 지연 구성요소는 LazyListState를 끌어올려 이 사용 사례를 지원합니다. 
이 패턴에 관한 자세한 내용은 목록의 상태 문서를 참고하세요.

목록 및 그리드  |  Jetpack Compose  |  Android Developers

사용자가 첫 번째 항목을 지나 스크롤했는지 여부에 따라 버튼을 표시하고 숨기는 예를 사용하는 경우

@OptIn(ExperimentalAnimationApi::class) // AnimatedVisibility
@Composable
fun MessageList(messages: List<Message>) {
    Box {
        val listState = rememberLazyListState()

        LazyColumn(state = listState) {
            // ...
        }

        // Show the button if the first visible item is past
        // the first item. We use a remembered derived state to
        // minimize unnecessary compositions
        val showButton by remember {
            derivedStateOf {
                listState.**firstVisibleItemIndex** > 0
            }
        }

        AnimatedVisibility(visible = showButton) {
            ScrollToTopButton()
        }
    }
}
사용자가 특정 지점을 지나 스크롤 한 후 분석에 기록 해야할때

val listState = **rememberLazyListState**()

LazyColumn(state = listState) {
    // ...
}

LaunchedEffect(listState) {
    **snapshotFlow** { listState.firstVisibleItemIndex }
        .map { index -> index > 0 }
        .distinctUntilChanged()
        .filter { it == true }
        .collect {
            MyAnalyticsService.sendScrolledPastFirstItemEvent()
        }
}

⭐️ rememberLazyListState

스크롤에 따른 동작을 하기 위해서는 스크롤 상태를 관찰해야 한다. 이때의 핵심이 스크롤 위치를 저장하고 List의 정보를 포함하는 객체인 LazyListState이다. 상태를 기억하도록 하려면 rememberLazyListState를 사용하여 상태를 호이스트하고 List에 전달하면 된다.

Lazy layout in Compose

공개 rememberX 함수에서 제공하는 기본값이 포함된 상태 매개변수가 있는 것이 구성 가능한 내장 함수에서 일반적인 패턴입니다. **rememberScaffoldState를 사용하여 상태를 끌어올리는 Scaffold에서 또 다른 예를 확인할 수 있습니다.**

⭐️ Scaffold란?