LazyGridState
class LazyGridState
@ExperimentalFoundationApi
constructor(
firstVisibleItemIndex: Int = 0,
firstVisibleItemScrollOffset: Int = 0,
internal val prefetchStrategy: LazyGridPrefetchStrategy = LazyGridPrefetchStrategy(),
) : ScrollableState
A state object that can be hoisted to control and observe scrolling.
In most cases, this will be created via rememberLazyGridState
.
Parameters
firstVisibleItemIndex | the initial value for LazyGridState.firstVisibleItemIndex |
firstVisibleItemScrollOffset | the initial value for LazyGridState.firstVisibleItemScrollOffset |
prefetchStrategy | the LazyGridPrefetchStrategy to use for prefetching content in this grid |
Secondary Constructors
@ExperimentalFoundationApi
constructor(
cacheWindow: LazyLayoutCacheWindow,
firstVisibleItemIndex: Int = 0,
firstVisibleItemScrollOffset: Int = 0,
) : this(
firstVisibleItemIndex,
firstVisibleItemScrollOffset,
LazyGridCacheWindowPrefetchStrategy(cacheWindow),
)
Parameters
cacheWindow | specifies the size of the ahead and behind window to be used as per LazyLayoutCacheWindow . |
firstVisibleItemIndex | the initial value for LazyGridState.firstVisibleItemIndex |
firstVisibleItemScrollOffset | the initial value for LazyGridState.firstVisibleItemScrollOffset |
constructor(
firstVisibleItemIndex: Int = 0,
firstVisibleItemScrollOffset: Int = 0,
) : this(firstVisibleItemIndex, firstVisibleItemScrollOffset, LazyGridPrefetchStrategy())
Parameters
firstVisibleItemIndex | the initial value for LazyGridState.firstVisibleItemIndex |
firstVisibleItemScrollOffset | the initial value for LazyGridState.firstVisibleItemScrollOffset |
Properties
val firstVisibleItemIndex: Int
The index of the first item that is visible within the scrollable viewport area, this means,
not including items in the content padding region. For the first visible item that includes
items in the content padding please use LazyGridLayoutInfo.visibleItemsInfo
.
Note that this property is observable and if you use it in the composable function it will be recomposed on every change causing potential performance issues.
If you want to run some side effects like sending an analytics event or updating a state based on this value consider using "snapshotFlow":
If you need to use it in the composition then consider wrapping the calculation into a derived state in order to only have recompositions when the derived value changes:
val firstVisibleItemScrollOffset: Int
The scroll offset of the first visible item. Scrolling forward is positive - i.e., the amount that the item is offset backwards
val layoutInfo: LazyGridLayoutInfo
The object of LazyGridLayoutInfo
calculated during the last layout pass. For example, you
can use it to calculate what items are currently visible.
Note that this property is observable and is updated after every scroll or remeasure. If you use it in the composable function it will be recomposed on every change causing potential performance issues including infinity recomposition loop. Therefore, avoid using it in the composition.
If you want to run some side effects like sending an analytics event or updating a state based on this value consider using "snapshotFlow":
val interactionSource: InteractionSource
InteractionSource
that will be used to dispatch drag events when this grid is being
dragged. If you want to know whether the fling (or animated scroll) is in progress, use
isScrollInProgress
.
Functions
suspend fun scrollToItem(@AndroidXIntRange(from = 0) index: Int, scrollOffset: Int = 0)
Instantly brings the item at index
to the top of the viewport, offset by scrollOffset
pixels.
Parameters
index | the index to which to scroll. Must be non-negative. |
scrollOffset | the offset that the item should end up after the scroll. Note that positive offset refers to forward scroll, so in a top-to-bottom list, positive offset will scroll the item further upward (taking it partly offscreen). |
fun requestScrollToItem(@AndroidXIntRange(from = 0) index: Int, scrollOffset: Int = 0)
Requests the item at index
to be at the start of the viewport during the next remeasure,
offset by scrollOffset
, and schedules a remeasure.
The scroll position will be updated to the requested position rather than maintain the index based on the first visible item key (when a data set change will also be applied during the next remeasure), but only for the next remeasure.
Any scroll in progress will be cancelled.
Parameters
index | the index to which to scroll. Must be non-negative. |
scrollOffset | the offset that the item should end up after the scroll. Note that positive offset refers to forward scroll, so in a top-to-bottom list, positive offset will scroll the item further upward (taking it partly offscreen). |
suspend fun animateScrollToItem(@AndroidXIntRange(from = 0) index: Int, scrollOffset: Int = 0)
Animate (smooth scroll) to the given item.
Parameters
index | the index to which to scroll. Must be non-negative. |
scrollOffset | the offset that the item should end up after the scroll. Note that positive offset refers to forward scroll, so in a top-to-bottom list, positive offset will scroll the item further upward (taking it partly offscreen). |
Companion Object
Properties
val Saver: Saver<LazyGridState, *>
The default Saver
implementation for LazyGridState
.