@@ -2,22 +2,21 @@ package li.songe.gkd.ui.component
22
33import androidx.compose.animation.core.AnimationConstants.DefaultDurationMillis
44import androidx.compose.foundation.ScrollState
5- import androidx.compose.foundation.gestures.ScrollableState
65import androidx.compose.foundation.layout.height
76import androidx.compose.foundation.layout.width
87import androidx.compose.foundation.lazy.LazyListState
9- import androidx.compose.foundation.lazy.rememberLazyListState
10- import androidx.compose.foundation.rememberScrollState
118import androidx.compose.material3.LocalTextStyle
129import androidx.compose.material3.TopAppBarDefaults
1310import androidx.compose.material3.TopAppBarScrollBehavior
11+ import androidx.compose.material3.TopAppBarState
1412import androidx.compose.runtime.Composable
1513import androidx.compose.runtime.LaunchedEffect
1614import androidx.compose.runtime.ReadOnlyComposable
1715import androidx.compose.runtime.collectAsState
1816import androidx.compose.runtime.derivedStateOf
1917import androidx.compose.runtime.remember
2018import androidx.compose.runtime.rememberCoroutineScope
19+ import androidx.compose.runtime.saveable.rememberSaveable
2120import androidx.compose.ui.Modifier
2221import androidx.compose.ui.focus.FocusRequester
2322import androidx.compose.ui.focus.focusRequester
@@ -81,46 +80,47 @@ fun useListScrollState(
8180 v3 : Any? = null,
8281 canScroll : () -> Boolean = { true },
8382): Pair <TopAppBarScrollBehavior , LazyListState > {
84- val scrollBehavior = TopAppBarDefaults .enterAlwaysScrollBehavior(canScroll = canScroll)
85- val scrollState = rememberLazyListState()
86- LaunchedEffect (getCompatStateValue(v1), getCompatStateValue(v2), getCompatStateValue(v3)) {
87- resetScroll(scrollBehavior, scrollState)
83+ val x1 = getCompatStateValue(v1)
84+ val x2 = getCompatStateValue(v2)
85+ val x3 = getCompatStateValue(v3)
86+ val scrollBehavior = TopAppBarDefaults .enterAlwaysScrollBehavior(
87+ state = rememberSaveable(x1, x2, x3, saver = TopAppBarState .Saver ) {
88+ TopAppBarState (- Float .MAX_VALUE , 0f , 0f )
89+ },
90+ canScroll = canScroll
91+ )
92+ val scrollState = rememberSaveable(x1, x2, x3, saver = LazyListState .Saver ) {
93+ LazyListState (0 , 0 )
8894 }
8995 return scrollBehavior to scrollState
9096}
9197
9298@Composable
9399fun usePinnedScrollBehaviorState (v1 : Any? ): Pair <TopAppBarScrollBehavior , LazyListState > {
94- val scrollBehavior = TopAppBarDefaults .pinnedScrollBehavior()
95- val scrollState = rememberLazyListState()
96- LaunchedEffect (getCompatStateValue(v1)) {
97- resetScroll(scrollBehavior, scrollState)
100+ val x1 = getCompatStateValue(v1)
101+ val scrollBehavior = TopAppBarDefaults .pinnedScrollBehavior(
102+ state = rememberSaveable(x1, saver = TopAppBarState .Saver ) {
103+ TopAppBarState (- Float .MAX_VALUE , 0f , 0f )
104+ },
105+ )
106+ val scrollState = rememberSaveable(x1, saver = LazyListState .Saver ) {
107+ LazyListState (0 , 0 )
98108 }
99109 return scrollBehavior to scrollState
100110}
101111
102112@Composable
103113fun useScrollBehaviorState (v1 : Any? ): Pair <TopAppBarScrollBehavior , ScrollState > {
104- val scrollBehavior = TopAppBarDefaults .enterAlwaysScrollBehavior()
105- val scrollState = rememberScrollState()
106- LaunchedEffect (getCompatStateValue(v1)) {
107- resetScroll(scrollBehavior, scrollState)
108- }
114+ val x1 = getCompatStateValue(v1)
115+ val scrollBehavior = TopAppBarDefaults .enterAlwaysScrollBehavior(
116+ state = rememberSaveable(x1, saver = TopAppBarState .Saver ) {
117+ TopAppBarState (- Float .MAX_VALUE , 0f , 0f )
118+ },
119+ )
120+ val scrollState = rememberSaveable(x1, saver = ScrollState .Saver ) { ScrollState (initial = 0 ) }
109121 return scrollBehavior to scrollState
110122}
111123
112- private suspend fun resetScroll (
113- scrollBehavior : TopAppBarScrollBehavior ,
114- scrollState : ScrollableState ,
115- ) {
116- when (scrollState) {
117- is LazyListState -> scrollState.scrollToItem(0 )
118- is ScrollState -> scrollState.scrollTo(0 )
119- }
120- scrollBehavior.state.heightOffset = 0f
121- scrollBehavior.state.contentOffset = 0f
122- }
123-
124124@Composable
125125fun LazyListState.isAtBottom (): androidx.compose.runtime.State <Boolean > = remember(this ) {
126126 derivedStateOf {
0 commit comments