Skip to content

Commit 84ab0de

Browse files
committed
library: Optimize nested scrolling logic
* PullToRefresh / TopAppBar
1 parent f0b2082 commit 84ab0de

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

miuix/src/commonMain/kotlin/top/yukonga/miuix/kmp/basic/PullToRefresh.kt

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,37 +114,52 @@ fun PullToRefresh(
114114
remember(pullToRefreshState, topAppBarScrollBehavior) {
115115
object : NestedScrollConnection {
116116
override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
117-
val consumedByAppBar = topAppBarScrollBehavior?.nestedScrollConnection?.onPreScroll(available, source) ?: Offset.Zero
117+
if (pullToRefreshState == RefreshState.Idle) {
118+
val consumedByAppBar =
119+
topAppBarScrollBehavior?.nestedScrollConnection?.onPreScroll(available, source) ?: Offset.Zero
118120

119-
val remaining = available - consumedByAppBar
120-
val consumedByRefresh = pullToRefreshState.createNestedScrollConnection().onPreScroll(remaining, source)
121+
val remaining = available - consumedByAppBar
122+
val consumedByRefresh = pullToRefreshState.createNestedScrollConnection().onPreScroll(remaining, source)
121123

122-
return consumedByAppBar + consumedByRefresh
124+
return consumedByAppBar + consumedByRefresh
125+
} else {
126+
val consumedByRefresh = pullToRefreshState.createNestedScrollConnection().onPreScroll(available, source)
127+
val remaining = available - consumedByRefresh
128+
val consumedByAppBar =
129+
topAppBarScrollBehavior?.nestedScrollConnection?.onPreScroll(remaining, source) ?: Offset.Zero
130+
131+
return consumedByRefresh + consumedByAppBar
132+
}
123133
}
124134

125135
override fun onPostScroll(
126136
consumed: Offset,
127137
available: Offset,
128138
source: NestedScrollSource
129139
): Offset {
130-
val consumedByAppBar = topAppBarScrollBehavior?.nestedScrollConnection?.onPostScroll(consumed, available, source) ?: Offset.Zero
140+
val consumedByAppBar =
141+
topAppBarScrollBehavior?.nestedScrollConnection?.onPostScroll(consumed, available, source) ?: Offset.Zero
131142

132-
val remaining = available - consumedByAppBar
133-
val consumedByRefresh =
134-
pullToRefreshState.createNestedScrollConnection().onPostScroll(consumed, remaining, source)
143+
val remaining = available - consumedByAppBar
144+
val consumedByRefresh =
145+
pullToRefreshState.createNestedScrollConnection().onPostScroll(consumed, remaining, source)
135146

136-
return consumedByAppBar + consumedByRefresh
147+
return consumedByAppBar + consumedByRefresh
137148
}
138149

139150
override suspend fun onPreFling(available: Velocity): Velocity {
140-
return topAppBarScrollBehavior?.nestedScrollConnection?.onPreFling(available) ?: Velocity.Zero
151+
val consumedByAppBar =
152+
topAppBarScrollBehavior?.nestedScrollConnection?.onPreFling(available) ?: Velocity.Zero
153+
154+
return consumedByAppBar
141155
}
142156

143157
override suspend fun onPostFling(
144158
consumed: Velocity,
145159
available: Velocity
146160
): Velocity {
147-
val consumedByAppBar = topAppBarScrollBehavior?.nestedScrollConnection?.onPostFling(consumed, available) ?: Velocity.Zero
161+
val consumedByAppBar =
162+
topAppBarScrollBehavior?.nestedScrollConnection?.onPostFling(consumed, available) ?: Velocity.Zero
148163

149164
return consumedByAppBar
150165
}

0 commit comments

Comments
 (0)