attached to post

TIL - 8 # HorizontalPager 페이지 이동 시 이벤트 기록하기 Compose에서 ViewPager처럼 사용할 수 있는 HorizontalPager가 있습니다. 페이지별로 이동할 때 이벤트를 수집하기 위해서 어떻게 접근하면 될까요? ## 접근법 1. `HorizontalPager` PagerScope에서 이벤트 기록 (X) - 코드 : https://pastebin.com/MQWdMazt 첫 번째 접근법으로, `pageContent` 내부에서 이벤트를 수집하게 코드가 구성되어있습니다. 하지만 이 경우에는 페이지 이동 시 이전 페이지 또는 다음 페이지를 보여줘야 하기 때문에 움직이는 도중에 페이지가 여러 번 출력될 수 있습니다. 따라서 `pageContent` 내부에서 이벤트를 수집하는 것은 바람직하지 않다고 볼 수 있습니다. ## 접근법 2. LaunchedEffect에서 PagerState.currentPage 값을 수집 (O) - 코드 : https://pastebin.com/nMHy0DF1 두 번째 접근법은 pagerState에서 currentPage 값이 변경될 때 수집하는 방법입니다. 공식 문서를 보게 되면 curretPage는 스냅 된 가장 가까운 페이지며, 관찰할 수 있는 값이고, 제스처나 애니메이션으로 스크롤 할 때 변경이 된다고 정의되어있습니다. 즉, 페이지를 이동할 때마다 현재 페이지가 출력되므로, 해당 값으로 이벤트를 수집하면 됩니다. 여기서 움직이는 동작이 완전히 멈췄을 때 수집하고 싶으면 어떻게 해야 할까요? ## 접근법 3. LaunchedEffect에서 PagerState.settledPage 값을 수집 (O) - 코드 : https://pastebin.com/4cKzCrQQ 세 번째 접근법으로는 pagerState에서 settledPage 값이 변경될 때 수집하는 방법입니다. `settled` 라는 단어는 안정적인 이라는 뜻이 있습니다. 즉 페이지가 스크롤 되는 동안 업데이트가 되지 않고 페이지가 움직이는 것을 멈춘 안정적인 상태일 때 값을 배출하는 특성이 있습니다. 이 방법을 사용하면 스크롤 하는 동안 이벤트를 수집하지 않으며 완전히 멈출 때 수집하는 것이 가능합니다. 조심해야 하는 점은 값이 발생하는 것이 스크롤이 멈출 때이므로, 중간 이벤트가 스킵 될 수도 있습니다.

콘텐츠를 더 읽고 싶다면?
원티드에 가입해 주세요.
로그인 후 모든 글을 볼 수 있습니다.
댓글 3