CarouselState

Class

Common
@ExperimentalMaterial3Api
class CarouselState(
    currentItem: Int = 0,
    @FloatRange(from = -0.5, to = 0.5) currentItemOffsetFraction: Float = 0f,
    itemCount: () -> Int,
) : ScrollableState

The state that can be used to control all types of carousels.

Parameters

currentItemthe current item to be scrolled to.
currentItemOffsetFractionthe offset of the current item as a fraction of the item's size. This should vary between -0.5 and 0.5 and indicates how to offset the current item from the snapped position.
itemCountthe number of items this Carousel will have.

Properties

Common
val currentItem: Int

The item that sits closest to the snapped position. This is an observable value and will change as the carousel scrolls either by gesture or animation.

Please refer to PagerState.currentPage for more information.

Functions

suspend fun scrollToItem(item: Int) = pagerState.scrollToPage(item, 0f)

Scroll (jump immediately) to a given item.

Parameters

itemThe destination item to scroll to
suspend fun animateScrollToItem(item: Int, animationSpec: AnimationSpec<Float> = spring()) =
        with(pagerState) {
            if ((item == currentPage && currentPageOffsetFraction == 0f) || pageCount == 0) {
                return
            }

            val targetPage = if (pageCount > 0) item.coerceIn(0, pageCount - 1) else 0
            scroll {
                LazyLayoutScrollScope(this@with, this)
                    .animateScrollToPage(
                        pagerState = this@with,
                        targetPage = targetPage,
                        targetPageOffsetToSnappedPosition = 0f,
                        animationSpec = animationSpec,
                        updateTargetPage = { updateTargetPage(it) },
                    )
            }
        }

Scroll animate to a given item. If the item is too far away from currentItem, Carousel will avoid composing all intermediate items by jumping to a nearer item before animating the scroll.

Please refer to the sample to learn how to use this API.

Parameters

itemthe index of the item to scroll to with an animation
animationSpecan AnimationSpec used to scroll between the items.

Companion Object

Properties

Common
val Saver: Saver<CarouselState, *>

To keep current item and item offset saved