Skip to content

Commit 685d776

Browse files
committed
fix: resetScroll failed
1 parent 22fc681 commit 685d776

File tree

1 file changed

+33
-8
lines changed
  • app/src/main/kotlin/li/songe/gkd/ui/component

1 file changed

+33
-8
lines changed

app/src/main/kotlin/li/songe/gkd/ui/component/Hooks.kt

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.runtime.collectAsState
1818
import androidx.compose.runtime.derivedStateOf
1919
import androidx.compose.runtime.remember
2020
import androidx.compose.runtime.rememberCoroutineScope
21+
import androidx.compose.runtime.saveable.rememberSaveable
2122
import androidx.compose.ui.Modifier
2223
import androidx.compose.ui.focus.FocusRequester
2324
import androidx.compose.ui.focus.focusRequester
@@ -26,6 +27,7 @@ import androidx.compose.ui.text.TextStyle
2627
import androidx.compose.ui.unit.Density
2728
import kotlinx.coroutines.delay
2829
import kotlinx.coroutines.flow.StateFlow
30+
import kotlinx.coroutines.launch
2931
import li.songe.gkd.data.RawSubscription
3032
import li.songe.gkd.util.mapState
3133
import 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(
93101
fun 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
103115
fun 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

Comments
 (0)