mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2024-09-29 08:20:51 +00:00
Add persistent lazy list state composable
This commit is contained in:
parent
907aa7b734
commit
be19d0a9cf
@ -0,0 +1,34 @@
|
|||||||
|
package com.vitorpamplona.amethyst.ui.screen
|
||||||
|
|
||||||
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.DisposableEffect
|
||||||
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
|
||||||
|
private val savedScrollStates = mutableMapOf<String, ScrollState>()
|
||||||
|
private data class ScrollState(val index: Int, val scrollOffset: Int)
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun rememberForeverLazyListState(
|
||||||
|
key: String,
|
||||||
|
initialFirstVisibleItemIndex: Int = 0,
|
||||||
|
initialFirstVisibleItemScrollOffset: Int = 0
|
||||||
|
): LazyListState {
|
||||||
|
val scrollState = rememberSaveable(saver = LazyListState.Saver) {
|
||||||
|
val savedValue = savedScrollStates[key]
|
||||||
|
val savedIndex = savedValue?.index ?: initialFirstVisibleItemIndex
|
||||||
|
val savedOffset = savedValue?.scrollOffset ?: initialFirstVisibleItemScrollOffset
|
||||||
|
LazyListState(
|
||||||
|
savedIndex,
|
||||||
|
savedOffset
|
||||||
|
)
|
||||||
|
}
|
||||||
|
DisposableEffect(Unit) {
|
||||||
|
onDispose {
|
||||||
|
val lastIndex = scrollState.firstVisibleItemIndex
|
||||||
|
val lastOffset = scrollState.firstVisibleItemScrollOffset
|
||||||
|
savedScrollStates[key] = ScrollState(lastIndex, lastOffset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return scrollState
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user