@@ -18,6 +18,7 @@ import androidx.compose.runtime.collectAsState
1818import androidx.compose.runtime.derivedStateOf
1919import androidx.compose.runtime.remember
2020import androidx.compose.runtime.rememberCoroutineScope
21+ import androidx.compose.runtime.saveable.rememberSaveable
2122import androidx.compose.ui.Modifier
2223import androidx.compose.ui.focus.FocusRequester
2324import androidx.compose.ui.focus.focusRequester
@@ -26,6 +27,7 @@ import androidx.compose.ui.text.TextStyle
2627import androidx.compose.ui.unit.Density
2728import kotlinx.coroutines.delay
2829import kotlinx.coroutines.flow.StateFlow
30+ import kotlinx.coroutines.launch
2931import li.songe.gkd.data.RawSubscription
3032import li.songe.gkd.util.mapState
3133import li.songe.gkd.util.subsMapFlow
@@ -83,8 +85,14 @@ fun useListScrollState(
8385): Pair <TopAppBarScrollBehavior , LazyListState > {
8486 val scrollBehavior = TopAppBarDefaults .enterAlwaysScrollBehavior(canScroll = canScroll)
8587 val scrollState = rememberLazyListState()
86- LaunchedEffect (getCompatStateValue(v1), getCompatStateValue(v2), getCompatStateValue(v3)) {
87- resetScroll(scrollBehavior, scrollState)
88+ val scope = rememberCoroutineScope()
89+ rememberSaveable(
90+ getCompatStateValue(v1),
91+ getCompatStateValue(v2),
92+ getCompatStateValue(v3),
93+ ) {
94+ scope.launch { resetScroll(scrollBehavior, scrollState) }
95+ 0
8896 }
8997 return scrollBehavior to scrollState
9098}
@@ -93,8 +101,12 @@ fun useListScrollState(
93101fun usePinnedScrollBehaviorState (v1 : Any? ): Pair <TopAppBarScrollBehavior , LazyListState > {
94102 val scrollBehavior = TopAppBarDefaults .pinnedScrollBehavior()
95103 val scrollState = rememberLazyListState()
96- LaunchedEffect (getCompatStateValue(v1)) {
97- resetScroll(scrollBehavior, scrollState)
104+ val scope = rememberCoroutineScope()
105+ rememberSaveable(
106+ getCompatStateValue(v1)
107+ ) {
108+ scope.launch { resetScroll(scrollBehavior, scrollState) }
109+ 0
98110 }
99111 return scrollBehavior to scrollState
100112}
@@ -103,8 +115,12 @@ fun usePinnedScrollBehaviorState(v1: Any?): Pair<TopAppBarScrollBehavior, LazyLi
103115fun useScrollBehaviorState (v1 : Any? ): Pair <TopAppBarScrollBehavior , ScrollState > {
104116 val scrollBehavior = TopAppBarDefaults .enterAlwaysScrollBehavior()
105117 val scrollState = rememberScrollState()
106- LaunchedEffect (getCompatStateValue(v1)) {
107- resetScroll(scrollBehavior, scrollState)
118+ val scope = rememberCoroutineScope()
119+ rememberSaveable(
120+ getCompatStateValue(v1)
121+ ) {
122+ scope.launch { resetScroll(scrollBehavior, scrollState) }
123+ 0
108124 }
109125 return scrollBehavior to scrollState
110126}
@@ -114,8 +130,17 @@ private suspend fun resetScroll(
114130 scrollState : ScrollableState ,
115131) {
116132 when (scrollState) {
117- is LazyListState -> scrollState.scrollToItem(0 )
118- is ScrollState -> scrollState.scrollTo(0 )
133+ is LazyListState -> {
134+ if (scrollState.firstVisibleItemScrollOffset > 0 || scrollState.firstVisibleItemIndex > 0 ) {
135+ scrollState.scrollToItem(0 )
136+ }
137+ }
138+
139+ is ScrollState -> {
140+ if (scrollState.value > 0 ) {
141+ scrollState.scrollTo(0 )
142+ }
143+ }
119144 }
120145 scrollBehavior.state.heightOffset = 0f
121146 scrollBehavior.state.contentOffset = 0f
0 commit comments