react-native-refresh-list2 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +67 -0
  3. package/lib/module/Loading/Loading.js +19 -0
  4. package/lib/module/Loading/Loading.js.map +1 -0
  5. package/lib/module/Loading/index.js +5 -0
  6. package/lib/module/Loading/index.js.map +1 -0
  7. package/lib/module/RefreshControl/BottomContainer.js +88 -0
  8. package/lib/module/RefreshControl/BottomContainer.js.map +1 -0
  9. package/lib/module/RefreshControl/NormalControl.js +94 -0
  10. package/lib/module/RefreshControl/NormalControl.js.map +1 -0
  11. package/lib/module/RefreshControl/RefreshContainer.js +53 -0
  12. package/lib/module/RefreshControl/RefreshContainer.js.map +1 -0
  13. package/lib/module/RefreshControl/RefreshContext.js +32 -0
  14. package/lib/module/RefreshControl/RefreshContext.js.map +1 -0
  15. package/lib/module/RefreshControl/RefreshFlatList.js +291 -0
  16. package/lib/module/RefreshControl/RefreshFlatList.js.map +1 -0
  17. package/lib/module/RefreshControl/RefreshScrollView.js +279 -0
  18. package/lib/module/RefreshControl/RefreshScrollView.js.map +1 -0
  19. package/lib/module/RefreshControl/index.js +7 -0
  20. package/lib/module/RefreshControl/index.js.map +1 -0
  21. package/lib/module/RefreshControl/type.js +39 -0
  22. package/lib/module/RefreshControl/type.js.map +1 -0
  23. package/lib/module/icon/CommentIcon.js +32 -0
  24. package/lib/module/icon/CommentIcon.js.map +1 -0
  25. package/lib/module/icon/Icon.js +25 -0
  26. package/lib/module/icon/Icon.js.map +1 -0
  27. package/lib/module/icon/MoreIcon.js +40 -0
  28. package/lib/module/icon/MoreIcon.js.map +1 -0
  29. package/lib/module/icon/Praise.js +23 -0
  30. package/lib/module/icon/Praise.js.map +1 -0
  31. package/lib/module/icon/SearchIcon.js +35 -0
  32. package/lib/module/icon/SearchIcon.js.map +1 -0
  33. package/lib/module/icon/index.js +5 -0
  34. package/lib/module/icon/index.js.map +1 -0
  35. package/lib/module/icon/library.js +20 -0
  36. package/lib/module/icon/library.js.map +1 -0
  37. package/lib/module/index.js +4 -0
  38. package/lib/module/index.js.map +1 -0
  39. package/lib/module/package.json +1 -0
  40. package/lib/typescript/package.json +1 -0
  41. package/lib/typescript/src/Loading/Loading.d.ts +9 -0
  42. package/lib/typescript/src/Loading/Loading.d.ts.map +1 -0
  43. package/lib/typescript/src/Loading/index.d.ts +3 -0
  44. package/lib/typescript/src/Loading/index.d.ts.map +1 -0
  45. package/lib/typescript/src/RefreshControl/BottomContainer.d.ts +17 -0
  46. package/lib/typescript/src/RefreshControl/BottomContainer.d.ts.map +1 -0
  47. package/lib/typescript/src/RefreshControl/NormalControl.d.ts +20 -0
  48. package/lib/typescript/src/RefreshControl/NormalControl.d.ts.map +1 -0
  49. package/lib/typescript/src/RefreshControl/RefreshContainer.d.ts +17 -0
  50. package/lib/typescript/src/RefreshControl/RefreshContainer.d.ts.map +1 -0
  51. package/lib/typescript/src/RefreshControl/RefreshContext.d.ts +9 -0
  52. package/lib/typescript/src/RefreshControl/RefreshContext.d.ts.map +1 -0
  53. package/lib/typescript/src/RefreshControl/RefreshFlatList.d.ts +20 -0
  54. package/lib/typescript/src/RefreshControl/RefreshFlatList.d.ts.map +1 -0
  55. package/lib/typescript/src/RefreshControl/RefreshScrollView.d.ts +20 -0
  56. package/lib/typescript/src/RefreshControl/RefreshScrollView.d.ts.map +1 -0
  57. package/lib/typescript/src/RefreshControl/index.d.ts +5 -0
  58. package/lib/typescript/src/RefreshControl/index.d.ts.map +1 -0
  59. package/lib/typescript/src/RefreshControl/type.d.ts +70 -0
  60. package/lib/typescript/src/RefreshControl/type.d.ts.map +1 -0
  61. package/lib/typescript/src/icon/CommentIcon.d.ts +3 -0
  62. package/lib/typescript/src/icon/CommentIcon.d.ts.map +1 -0
  63. package/lib/typescript/src/icon/Icon.d.ts +10 -0
  64. package/lib/typescript/src/icon/Icon.d.ts.map +1 -0
  65. package/lib/typescript/src/icon/MoreIcon.d.ts +3 -0
  66. package/lib/typescript/src/icon/MoreIcon.d.ts.map +1 -0
  67. package/lib/typescript/src/icon/Praise.d.ts +9 -0
  68. package/lib/typescript/src/icon/Praise.d.ts.map +1 -0
  69. package/lib/typescript/src/icon/SearchIcon.d.ts +9 -0
  70. package/lib/typescript/src/icon/SearchIcon.d.ts.map +1 -0
  71. package/lib/typescript/src/icon/index.d.ts +3 -0
  72. package/lib/typescript/src/icon/index.d.ts.map +1 -0
  73. package/lib/typescript/src/icon/library.d.ts +17 -0
  74. package/lib/typescript/src/icon/library.d.ts.map +1 -0
  75. package/lib/typescript/src/index.d.ts +2 -0
  76. package/lib/typescript/src/index.d.ts.map +1 -0
  77. package/package.json +168 -0
  78. package/src/Loading/Loading.tsx +15 -0
  79. package/src/Loading/index.tsx +5 -0
  80. package/src/RefreshControl/BottomContainer.tsx +112 -0
  81. package/src/RefreshControl/NormalControl.tsx +118 -0
  82. package/src/RefreshControl/RefreshContainer.tsx +74 -0
  83. package/src/RefreshControl/RefreshContext.tsx +30 -0
  84. package/src/RefreshControl/RefreshFlatList.tsx +372 -0
  85. package/src/RefreshControl/RefreshScrollView.tsx +359 -0
  86. package/src/RefreshControl/index.tsx +5 -0
  87. package/src/RefreshControl/type.ts +74 -0
  88. package/src/icon/CommentIcon.tsx +29 -0
  89. package/src/icon/Icon.tsx +26 -0
  90. package/src/icon/MoreIcon.tsx +38 -0
  91. package/src/icon/Praise.tsx +21 -0
  92. package/src/icon/SearchIcon.tsx +36 -0
  93. package/src/icon/index.tsx +3 -0
  94. package/src/icon/library.ts +30 -0
  95. package/src/index.tsx +1 -0
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+
3
+ // RefreshFlatList.tsx
4
+
5
+ import React, { useCallback, useEffect, useRef } from 'react';
6
+ import { Dimensions, Platform } from 'react-native';
7
+ import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
8
+ import Animated, { runOnJS, interpolate, useAnimatedScrollHandler, withTiming, useAnimatedProps, useAnimatedStyle, useSharedValue, useDerivedValue, withSequence, withDelay, Easing, useAnimatedReaction } from 'react-native-reanimated';
9
+ import { RefreshContainerContext, RefreshStatus } from "./type.js";
10
+ import RefreshContainer from "./RefreshContainer.js";
11
+ // 假设您不需要单独的 BottomContainer 组件,而是将加载更多内容放在 ListFooterComponent 中
12
+
13
+ // ------------------- 常量定义 -------------------
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ const {
16
+ height
17
+ } = Dimensions.get('window');
18
+ const MAX_SCROLL_VELOCITY_Y = 20;
19
+ const MIN_SCROLL_VELOCITY_Y = 0.5;
20
+ const DEFAULT_TRIGGLE_HEIGHT = 100;
21
+ const RESET_TIMING_EASING = Easing.bezier(0.33, 1, 0.68, 1);
22
+ const MAX_BOUNCE_DISTANCE = 100;
23
+
24
+ // ------------------- Props 定义 -------------------
25
+
26
+ const RefreshFlatList = props => {
27
+ const {
28
+ refreshing,
29
+ onRefresh,
30
+ refreshComponent,
31
+ transitionY,
32
+ triggleHeight = DEFAULT_TRIGGLE_HEIGHT,
33
+ canOffset = true,
34
+ bounces = true,
35
+ onScroll: onScrollHandler,
36
+ data,
37
+ renderItem,
38
+ keyExtractor,
39
+ offsetY = 0,
40
+ scrollParentRef,
41
+ scrollViewParentTransitionY,
42
+ ...restProps
43
+ } = props;
44
+
45
+ // ------------------- Shared Values 和 Refs -------------------
46
+ const panRef = useRef(null);
47
+ const internalScrollRef = useRef(null);
48
+ const scrollRef = scrollParentRef || internalScrollRef;
49
+ const internalScrollViewParentTransitionY = useSharedValue(0);
50
+ const scrollViewTransitionY = scrollViewParentTransitionY || internalScrollViewParentTransitionY;
51
+ const offset = useSharedValue(0);
52
+ const scrollBounse = useSharedValue(false);
53
+ const refreshStatus = useSharedValue(RefreshStatus.Idle);
54
+ const scrollViewTotalHeight = useSharedValue(0);
55
+ const scrollBeginTop = useSharedValue(0);
56
+ const internalRefreshTransitionY = useSharedValue(0);
57
+ const refreshTransitionY = transitionY ?? internalRefreshTransitionY;
58
+
59
+ // ------------------- Derived Values -------------------
60
+ const direction = useDerivedValue(() => {
61
+ return refreshTransitionY.value > 0 ? 1 : -1;
62
+ }, [refreshTransitionY]);
63
+ const canRefresh = useDerivedValue(() => {
64
+ const marginTop = scrollViewTransitionY.value;
65
+ // 核心:判断是否触顶 (下拉) 或触底 (上拉/加载更多)
66
+ return marginTop < 1;
67
+ });
68
+ useAnimatedReaction(() => refreshStatus.value, () => {});
69
+
70
+ // ------------------- Refreshing Side Effect -------------------
71
+ useEffect(() => {
72
+ console.log(refreshing);
73
+ if (refreshing) {
74
+ console.log(direction.value);
75
+ if (direction.value === 1) {
76
+ refreshStatus.value = RefreshStatus.Holding;
77
+ // 刷新中保持指示器在触发高度
78
+ refreshTransitionY.value = withTiming(triggleHeight * direction.value);
79
+ } else if (refreshStatus.value === RefreshStatus.Idle) {
80
+ // scrollRef.current.scrollToOffset({offset: 0, animated: false});
81
+ refreshStatus.value = RefreshStatus.Holding;
82
+ refreshTransitionY.value = withTiming(triggleHeight);
83
+ }
84
+ } else if (refreshStatus.value !== RefreshStatus.Idle) {
85
+ if (direction.value === 1) {
86
+ // 下拉刷新完成,收起指示器
87
+ refreshStatus.value = RefreshStatus.Done;
88
+ refreshTransitionY.value = withDelay(500, withTiming(0, {
89
+ easing: RESET_TIMING_EASING
90
+ }, () => {
91
+ refreshStatus.value = RefreshStatus.Idle;
92
+ }));
93
+ }
94
+ }
95
+ }, [refreshing, direction.value, refreshStatus, refreshTransitionY, triggleHeight]);
96
+ const handleOnRefresh = useCallback(() => {
97
+ if (refreshing) return;
98
+ onRefresh && onRefresh();
99
+ }, [refreshing, onRefresh]);
100
+
101
+ // ------------------- Scroll Handler -------------------
102
+ const onScroll = useAnimatedScrollHandler({
103
+ onBeginDrag: (event, context) => {
104
+ context.scrollBeginTime = new Date().valueOf();
105
+ context.scrollBeginY = event.contentOffset.y;
106
+ },
107
+ onScroll: (event, context) => {
108
+ onScrollHandler && runOnJS(onScrollHandler)({
109
+ nativeEvent: event
110
+ });
111
+ const {
112
+ scrollBeginY,
113
+ scrollBeginTime
114
+ } = context;
115
+ scrollViewTransitionY.value = event.contentOffset.y;
116
+ // 滚动边界反弹动画逻辑
117
+ const marginTop = scrollViewTransitionY.value;
118
+ if (marginTop === 0 && !scrollBounse.value) {
119
+ const bounceDirection = marginTop === 0 ? 1 : -1;
120
+ const endTime = new Date().valueOf();
121
+ const velocityY = Math.min(Math.abs((scrollViewTransitionY.value - scrollBeginY) / (endTime - scrollBeginTime)), MAX_SCROLL_VELOCITY_Y);
122
+ if (!bounces || velocityY < MIN_SCROLL_VELOCITY_Y) return;
123
+ const ratio = Math.PI / 2 / MAX_SCROLL_VELOCITY_Y * velocityY;
124
+ const bounceDistance = height / 4 * Math.sin(ratio);
125
+ const duration = 100 + 100 * Math.sin(ratio * 2);
126
+ scrollBounse.value = true;
127
+ refreshTransitionY.value = withSequence(withTiming(bounceDistance * bounceDirection, {
128
+ duration
129
+ }), withTiming(0, {
130
+ duration,
131
+ easing: RESET_TIMING_EASING
132
+ }, () => {
133
+ scrollBounse.value = false;
134
+ }));
135
+ }
136
+ }
137
+ });
138
+
139
+ // @ts-ignore
140
+ const nativeRef = useRef();
141
+ const nativeGesture = Gesture.Native().withRef(nativeRef);
142
+ const scrollToTopJS = useCallback(() => {
143
+ // 检查 ref 是否存在
144
+ if (scrollRef.current) {
145
+ // 使用 scrollToOffset 替代 scrollToTop,因为 FlatList/ScrollView 实例上
146
+ // 没有原生 scrollToTop 方法,但有 scrollToOffset
147
+ // 或者使用你之前提到的 scrollToOffset({offset: 0, animated: false})
148
+ scrollRef.current.scrollToOffset({
149
+ offset: 0,
150
+ animated: false // 禁用动画以确保即时归位
151
+ });
152
+
153
+ // 如果你的代码中 FlatList 是经过 Animated 包装的,可能需要调用其原生方法
154
+ // (scrollRef.current as any).getNode().scrollToOffset({ offset: 0, animated: false });
155
+ }
156
+ }, [scrollRef]);
157
+
158
+ // ------------------- Pan Gesture -------------------
159
+ const panGesture = Gesture.Pan().withRef(panRef).activeOffsetY(10).simultaneousWithExternalGesture(nativeRef)
160
+ // 移除 activeOffsetY 或设置为极小值,让优先级完全由 requireExternalGestureToFail 决定
161
+ // 关键:与原生滚动同时进行,以便在触顶时接管
162
+ .onBegin(() => {
163
+ offset.value = refreshTransitionY.value;
164
+ scrollBeginTop.value = scrollViewTransitionY.value;
165
+ }).onUpdate(({
166
+ translationY
167
+ }) => {
168
+ const shouldAllowModify = canRefresh.value || refreshStatus.value !== RefreshStatus.Idle && translationY - scrollBeginTop.value >= 0;
169
+ if (!shouldAllowModify) {
170
+ refreshTransitionY.value = 0;
171
+ // 如果不在触顶区域且未处于刷新状态,则不修改位移
172
+ return;
173
+ }
174
+ if (Platform.OS !== 'ios') runOnJS(scrollToTopJS)();
175
+ let nextY = offset.value + interpolate(translationY - scrollBeginTop.value, [0, height], [0, height / 2]
176
+ // 确保超过 height 时不会失控,但这里通常不需要
177
+ );
178
+ refreshTransitionY.value = Math.min(nextY, MAX_BOUNCE_DISTANCE);
179
+ if (!refreshing) {
180
+ if (Math.abs(refreshTransitionY.value) >= triggleHeight) {
181
+ refreshStatus.value = RefreshStatus.Reached;
182
+ } else {
183
+ refreshStatus.value = RefreshStatus.Pulling;
184
+ }
185
+ }
186
+ }).onEnd(() => {
187
+ if (refreshing) {
188
+ if (refreshTransitionY.value >= triggleHeight * direction.value) {
189
+ refreshTransitionY.value = withTiming(triggleHeight * direction.value);
190
+ } else {
191
+ ``;
192
+ refreshTransitionY.value = withTiming(0);
193
+ }
194
+ return;
195
+ }
196
+ if (Math.abs(refreshTransitionY.value) >= triggleHeight) {
197
+ if (refreshTransitionY.value > 0) {
198
+ runOnJS(handleOnRefresh)();
199
+ }
200
+ } else {
201
+ refreshTransitionY.value = withTiming(0, {
202
+ easing: RESET_TIMING_EASING
203
+ }, () => {
204
+ refreshStatus.value = RefreshStatus.Idle;
205
+ });
206
+ }
207
+ });
208
+
209
+ // ------------------- Animated Styles and Props -------------------
210
+ const animatedStyle = useAnimatedStyle(() => {
211
+ // 🌟 核心修复:这个 style 将应用于外部 Animated.View,实现整个列表的平移
212
+ return {
213
+ transform: [{
214
+ translateY: canOffset ? refreshTransitionY.value : 0
215
+ }]
216
+ };
217
+ });
218
+ const animatedScrollEnabled = useDerivedValue(() => {
219
+ if (Platform.OS === 'ios') return true;
220
+ return refreshTransitionY.value <= 0;
221
+ }, [refreshTransitionY]);
222
+ const animatedProps = useAnimatedProps(() => {
223
+ const top = -refreshTransitionY.value;
224
+ return {
225
+ scrollEnabled: animatedScrollEnabled.value,
226
+ scrollIndicatorInsets: {
227
+ top: top - 1,
228
+ left: 0,
229
+ bottom: 0,
230
+ right: 0
231
+ }
232
+ };
233
+ });
234
+ const derivedTransitionY = useDerivedValue(() => {
235
+ return refreshTransitionY.value + offsetY;
236
+ }, [offsetY]); // 依赖 offsetY,如果 offsetY 变化,重新计算
237
+
238
+ // ------------------- JSX 渲染 -------------------
239
+ return /*#__PURE__*/_jsx(GestureHandlerRootView, {
240
+ style: {
241
+ flex: 1
242
+ },
243
+ children: /*#__PURE__*/_jsxs(RefreshContainerContext.Provider, {
244
+ value: {
245
+ transitionY: refreshTransitionY,
246
+ scrollBounse,
247
+ triggleHeight,
248
+ refreshing,
249
+ refreshStatus,
250
+ direction,
251
+ canRefresh
252
+ },
253
+ children: [/*#__PURE__*/_jsx(GestureDetector, {
254
+ gesture: panGesture,
255
+ children: /*#__PURE__*/_jsx(GestureDetector, {
256
+ gesture: nativeGesture,
257
+ children: /*#__PURE__*/_jsx(Animated.FlatList, {
258
+ ref: scrollRef,
259
+ bounces: false,
260
+ overScrollMode: 'never',
261
+ scrollEventThrottle: 16,
262
+ onScroll: onScroll,
263
+ animatedProps: animatedProps
264
+ // 移除 style={animatedStyle}
265
+ ,
266
+ onContentSizeChange: (_, h) => {
267
+ scrollViewTotalHeight.value = h;
268
+ }
269
+ // FlatList 核心 Props
270
+ ,
271
+ data: data,
272
+ renderItem: renderItem,
273
+ keyExtractor: keyExtractor,
274
+ ...restProps,
275
+ style: [{
276
+ flex: 1
277
+ }, animatedStyle, restProps.style] // 合并样式
278
+ })
279
+ })
280
+ }), /*#__PURE__*/_jsx(RefreshContainer, {
281
+ offsetTop: offsetY,
282
+ refreshStatus: refreshStatus,
283
+ transitionY: derivedTransitionY,
284
+ triggleHeight: triggleHeight + offsetY,
285
+ children: refreshComponent && refreshComponent()
286
+ })]
287
+ })
288
+ });
289
+ };
290
+ export default RefreshFlatList;
291
+ //# sourceMappingURL=RefreshFlatList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","Dimensions","Platform","Gesture","GestureDetector","GestureHandlerRootView","Animated","runOnJS","interpolate","useAnimatedScrollHandler","withTiming","useAnimatedProps","useAnimatedStyle","useSharedValue","useDerivedValue","withSequence","withDelay","Easing","useAnimatedReaction","RefreshContainerContext","RefreshStatus","RefreshContainer","jsx","_jsx","jsxs","_jsxs","height","get","MAX_SCROLL_VELOCITY_Y","MIN_SCROLL_VELOCITY_Y","DEFAULT_TRIGGLE_HEIGHT","RESET_TIMING_EASING","bezier","MAX_BOUNCE_DISTANCE","RefreshFlatList","props","refreshing","onRefresh","refreshComponent","transitionY","triggleHeight","canOffset","bounces","onScroll","onScrollHandler","data","renderItem","keyExtractor","offsetY","scrollParentRef","scrollViewParentTransitionY","restProps","panRef","internalScrollRef","scrollRef","internalScrollViewParentTransitionY","scrollViewTransitionY","offset","scrollBounse","refreshStatus","Idle","scrollViewTotalHeight","scrollBeginTop","internalRefreshTransitionY","refreshTransitionY","direction","value","canRefresh","marginTop","console","log","Holding","Done","easing","handleOnRefresh","onBeginDrag","event","context","scrollBeginTime","Date","valueOf","scrollBeginY","contentOffset","y","nativeEvent","bounceDirection","endTime","velocityY","Math","min","abs","ratio","PI","bounceDistance","sin","duration","nativeRef","nativeGesture","Native","withRef","scrollToTopJS","current","scrollToOffset","animated","panGesture","Pan","activeOffsetY","simultaneousWithExternalGesture","onBegin","onUpdate","translationY","shouldAllowModify","OS","nextY","Reached","Pulling","onEnd","animatedStyle","transform","translateY","animatedScrollEnabled","animatedProps","top","scrollEnabled","scrollIndicatorInsets","left","bottom","right","derivedTransitionY","style","flex","children","Provider","gesture","FlatList","ref","overScrollMode","scrollEventThrottle","onContentSizeChange","_","h","offsetTop"],"sourceRoot":"..\\..\\..\\src","sources":["RefreshControl/RefreshFlatList.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+
3
+ // RefreshFlatList.tsx
4
+
5
+ import React, { useCallback, useEffect, useRef } from 'react';
6
+ import { Dimensions, Platform } from 'react-native';
7
+ import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
8
+ import Animated, { runOnJS, interpolate, useAnimatedScrollHandler, withTiming, useAnimatedProps, useAnimatedStyle, useSharedValue, useDerivedValue, withSequence, withDelay, Easing, useAnimatedReaction } from 'react-native-reanimated';
9
+ import { RefreshContainerContext, RefreshStatus } from "./type.js";
10
+ import RefreshContainer from "./RefreshContainer.js";
11
+ // 假设您不需要单独的 BottomContainer 组件,而是将加载更多内容放在 ListFooterComponent 中
12
+
13
+ // ------------------- 常量定义 -------------------
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ const {
16
+ height
17
+ } = Dimensions.get('window');
18
+ const MAX_SCROLL_VELOCITY_Y = 20;
19
+ const MIN_SCROLL_VELOCITY_Y = 0.5;
20
+ const DEFAULT_TRIGGLE_HEIGHT = 100;
21
+ const RESET_TIMING_EASING = Easing.bezier(0.33, 1, 0.68, 1);
22
+ const MAX_BOUNCE_DISTANCE = 100;
23
+
24
+ // ------------------- Props 定义 -------------------
25
+
26
+ const RefreshScrollList = props => {
27
+ const {
28
+ refreshing,
29
+ onRefresh,
30
+ refreshComponent,
31
+ triggleHeight = DEFAULT_TRIGGLE_HEIGHT,
32
+ canOffset = true,
33
+ bounces = true,
34
+ onScroll: onScrollHandler,
35
+ children,
36
+ offsetY = 0,
37
+ scrollViewParentTransitionY,
38
+ scrollParentRef,
39
+ ...restProps
40
+ } = props;
41
+
42
+ // ------------------- Shared Values 和 Refs -------------------
43
+ const panRef = useRef(null);
44
+ const internalScrollRef = useRef(null);
45
+ const scrollRef = scrollParentRef || internalScrollRef;
46
+
47
+ // @ts-ignore
48
+ const nativeRef = useRef();
49
+ const nativeGesture = Gesture.Native().withRef(nativeRef);
50
+ const internalScrollViewParentTransitionY = useSharedValue(0);
51
+ const scrollViewTransitionY = scrollViewParentTransitionY || internalScrollViewParentTransitionY;
52
+ const refreshTransitionY = useSharedValue(0);
53
+ const offset = useSharedValue(0);
54
+ const scrollBounse = useSharedValue(false);
55
+ const refreshStatus = useSharedValue(RefreshStatus.Idle);
56
+ const scrollViewTotalHeight = useSharedValue(0);
57
+ const scrollBeginTop = useSharedValue(0);
58
+
59
+ // ------------------- Derived Values -------------------
60
+ const direction = useDerivedValue(() => {
61
+ return refreshTransitionY.value > 0 ? 1 : -1;
62
+ }, [refreshTransitionY]);
63
+ const canRefresh = useDerivedValue(() => {
64
+ const marginTop = scrollViewTransitionY.value;
65
+ // 核心:判断是否触顶 (下拉) 或触底 (上拉/加载更多)
66
+ return marginTop < 1;
67
+ });
68
+ useAnimatedReaction(() => refreshStatus.value, () => {});
69
+
70
+ // ------------------- Refreshing Side Effect -------------------
71
+ useEffect(() => {
72
+ if (refreshing) {
73
+ if (direction.value === 1) {
74
+ refreshStatus.value = RefreshStatus.Holding;
75
+ // 刷新中保持指示器在触发高度
76
+ refreshTransitionY.value = withTiming(triggleHeight * direction.value);
77
+ } else if (refreshStatus.value === RefreshStatus.Idle) {
78
+ // scrollRef.current?.scrollTo({
79
+ // y: 0,
80
+ // animated: false,
81
+ // });
82
+ refreshStatus.value = RefreshStatus.Holding;
83
+ refreshTransitionY.value = withTiming(triggleHeight);
84
+ }
85
+ } else if (refreshStatus.value !== RefreshStatus.Idle) {
86
+ if (direction.value === 1) {
87
+ // 下拉刷新完成,收起指示器
88
+ refreshStatus.value = RefreshStatus.Done;
89
+ refreshTransitionY.value = withDelay(500, withTiming(0, {
90
+ easing: RESET_TIMING_EASING
91
+ }, () => {
92
+ refreshStatus.value = RefreshStatus.Idle;
93
+ }));
94
+ }
95
+ }
96
+ }, [refreshing, direction.value, refreshStatus, refreshTransitionY, triggleHeight]);
97
+ const handleOnRefresh = useCallback(() => {
98
+ if (refreshing) return;
99
+ onRefresh && onRefresh();
100
+ }, [refreshing, onRefresh]);
101
+
102
+ // ------------------- Scroll Handler -------------------
103
+ const onScroll = useAnimatedScrollHandler({
104
+ onBeginDrag: (event, context) => {
105
+ context.scrollBeginTime = new Date().valueOf();
106
+ context.scrollBeginY = event.contentOffset.y;
107
+ },
108
+ onScroll: (event, context) => {
109
+ onScrollHandler && runOnJS(onScrollHandler)({
110
+ nativeEvent: event
111
+ });
112
+ const {
113
+ scrollBeginY,
114
+ scrollBeginTime
115
+ } = context;
116
+ scrollViewTransitionY.value = event.contentOffset.y;
117
+ // 滚动边界反弹动画逻辑
118
+ const marginTop = scrollViewTransitionY.value;
119
+ if (marginTop === 0 && !scrollBounse.value) {
120
+ const bounceDirection = marginTop === 0 ? 1 : -1;
121
+ const endTime = new Date().valueOf();
122
+ const velocityY = Math.min(Math.abs((scrollViewTransitionY.value - scrollBeginY) / (endTime - scrollBeginTime)), MAX_SCROLL_VELOCITY_Y);
123
+ if (!bounces || velocityY < MIN_SCROLL_VELOCITY_Y) return;
124
+ const ratio = Math.PI / 2 / MAX_SCROLL_VELOCITY_Y * velocityY;
125
+ const bounceDistance = height / 4 * Math.sin(ratio);
126
+ const duration = 100 + 100 * Math.sin(ratio * 2);
127
+ scrollBounse.value = true;
128
+ refreshTransitionY.value = withSequence(withTiming(bounceDistance * bounceDirection, {
129
+ duration
130
+ }), withTiming(0, {
131
+ duration,
132
+ easing: RESET_TIMING_EASING
133
+ }, () => {
134
+ scrollBounse.value = false;
135
+ }));
136
+ }
137
+ }
138
+ });
139
+ const scrollToTopJS = useCallback(() => {
140
+ // 检查 ref 是否存在
141
+ if (scrollRef.current) {
142
+ scrollRef.current.scrollTo({
143
+ y: 0,
144
+ animated: false
145
+ });
146
+ }
147
+ }, [scrollRef]);
148
+
149
+ // ------------------- Pan Gesture -------------------
150
+ const panGesture = Gesture.Pan().withRef(panRef).activeOffsetY(10).simultaneousWithExternalGesture(nativeRef)
151
+ // 移除 activeOffsetY 或设置为极小值,让优先级完全由 requireExternalGestureToFail 决定
152
+ // 关键:与原生滚动同时进行,以便在触顶时接管
153
+ .onBegin(() => {
154
+ offset.value = refreshTransitionY.value;
155
+ scrollBeginTop.value = scrollViewTransitionY.value;
156
+ }).onUpdate(({
157
+ translationY
158
+ }) => {
159
+ const shouldAllowModify = canRefresh.value || refreshStatus.value !== RefreshStatus.Idle && translationY - scrollBeginTop.value >= 0;
160
+ if (!shouldAllowModify) {
161
+ refreshTransitionY.value = 0;
162
+ // 如果不在触顶区域且未处于刷新状态,则不修改位移
163
+ return;
164
+ }
165
+ if (Platform.OS !== 'ios') runOnJS(scrollToTopJS)();
166
+ let nextY = offset.value + interpolate(translationY - scrollBeginTop.value, [0, height], [0, height / 2]
167
+ // 确保超过 height 时不会失控,但这里通常不需要
168
+ );
169
+ refreshTransitionY.value = Math.min(nextY, MAX_BOUNCE_DISTANCE);
170
+ if (!refreshing) {
171
+ if (Math.abs(refreshTransitionY.value) >= triggleHeight) {
172
+ refreshStatus.value = RefreshStatus.Reached;
173
+ } else {
174
+ refreshStatus.value = RefreshStatus.Pulling;
175
+ }
176
+ }
177
+ }).onEnd(() => {
178
+ if (refreshing) {
179
+ if (refreshTransitionY.value >= triggleHeight * direction.value) {
180
+ refreshTransitionY.value = withTiming(triggleHeight * direction.value);
181
+ } else {
182
+ ``;
183
+ refreshTransitionY.value = withTiming(0);
184
+ }
185
+ return;
186
+ }
187
+ if (Math.abs(refreshTransitionY.value) >= triggleHeight) {
188
+ if (refreshTransitionY.value > 0) {
189
+ runOnJS(handleOnRefresh)();
190
+ }
191
+ } else {
192
+ refreshTransitionY.value = withTiming(0, {
193
+ easing: RESET_TIMING_EASING
194
+ }, () => {
195
+ refreshStatus.value = RefreshStatus.Idle;
196
+ });
197
+ }
198
+ });
199
+
200
+ // ------------------- Animated Styles and Props -------------------
201
+ const animatedStyle = useAnimatedStyle(() => {
202
+ // 🌟 核心修复:这个 style 将应用于外部 Animated.View,实现整个列表的平移
203
+ return {
204
+ transform: [{
205
+ translateY: canOffset ? refreshTransitionY.value : 0
206
+ }]
207
+ };
208
+ });
209
+ const animatedScrollEnabled = useDerivedValue(() => {
210
+ if (Platform.OS === 'ios') return true;
211
+ return refreshTransitionY.value <= 0;
212
+ }, [refreshTransitionY]);
213
+ const animatedProps = useAnimatedProps(() => {
214
+ const top = -refreshTransitionY.value;
215
+ return {
216
+ scrollEnabled: animatedScrollEnabled.value,
217
+ scrollIndicatorInsets: {
218
+ top: top - 1,
219
+ left: 0,
220
+ bottom: 0,
221
+ right: 0
222
+ }
223
+ };
224
+ });
225
+ const derivedTransitionY = useDerivedValue(() => {
226
+ return refreshTransitionY.value + offsetY;
227
+ }, [offsetY]); // 依赖 offsetY,如果 offsetY 变化,重新计算
228
+
229
+ // ------------------- JSX 渲染 -------------------
230
+ return /*#__PURE__*/_jsx(GestureHandlerRootView, {
231
+ style: {
232
+ flex: 1
233
+ },
234
+ children: /*#__PURE__*/_jsxs(RefreshContainerContext.Provider, {
235
+ value: {
236
+ transitionY: refreshTransitionY,
237
+ scrollBounse,
238
+ triggleHeight,
239
+ refreshing,
240
+ refreshStatus,
241
+ direction,
242
+ canRefresh
243
+ },
244
+ children: [/*#__PURE__*/_jsx(GestureDetector, {
245
+ gesture: panGesture,
246
+ children: /*#__PURE__*/_jsx(GestureDetector, {
247
+ gesture: nativeGesture,
248
+ children: /*#__PURE__*/_jsx(Animated.ScrollView, {
249
+ ref: scrollRef,
250
+ bounces: false,
251
+ overScrollMode: 'never',
252
+ scrollEventThrottle: 16,
253
+ onScroll: onScroll,
254
+ animatedProps: animatedProps
255
+ // 移除 style={animatedStyle}
256
+ ,
257
+ onContentSizeChange: (_, h) => {
258
+ scrollViewTotalHeight.value = h;
259
+ },
260
+ ...restProps,
261
+ style: [{
262
+ flex: 1
263
+ }, animatedStyle] // 合并样式
264
+ ,
265
+ children: children
266
+ })
267
+ })
268
+ }), /*#__PURE__*/_jsx(RefreshContainer, {
269
+ offsetTop: offsetY,
270
+ refreshStatus: refreshStatus,
271
+ transitionY: derivedTransitionY,
272
+ triggleHeight: triggleHeight + offsetY,
273
+ children: refreshComponent && refreshComponent()
274
+ })]
275
+ })
276
+ });
277
+ };
278
+ export default RefreshScrollList;
279
+ //# sourceMappingURL=RefreshScrollView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","Dimensions","Platform","Gesture","GestureDetector","GestureHandlerRootView","Animated","runOnJS","interpolate","useAnimatedScrollHandler","withTiming","useAnimatedProps","useAnimatedStyle","useSharedValue","useDerivedValue","withSequence","withDelay","Easing","useAnimatedReaction","RefreshContainerContext","RefreshStatus","RefreshContainer","jsx","_jsx","jsxs","_jsxs","height","get","MAX_SCROLL_VELOCITY_Y","MIN_SCROLL_VELOCITY_Y","DEFAULT_TRIGGLE_HEIGHT","RESET_TIMING_EASING","bezier","MAX_BOUNCE_DISTANCE","RefreshScrollList","props","refreshing","onRefresh","refreshComponent","triggleHeight","canOffset","bounces","onScroll","onScrollHandler","children","offsetY","scrollViewParentTransitionY","scrollParentRef","restProps","panRef","internalScrollRef","scrollRef","nativeRef","nativeGesture","Native","withRef","internalScrollViewParentTransitionY","scrollViewTransitionY","refreshTransitionY","offset","scrollBounse","refreshStatus","Idle","scrollViewTotalHeight","scrollBeginTop","direction","value","canRefresh","marginTop","Holding","Done","easing","handleOnRefresh","onBeginDrag","event","context","scrollBeginTime","Date","valueOf","scrollBeginY","contentOffset","y","nativeEvent","bounceDirection","endTime","velocityY","Math","min","abs","ratio","PI","bounceDistance","sin","duration","scrollToTopJS","current","scrollTo","animated","panGesture","Pan","activeOffsetY","simultaneousWithExternalGesture","onBegin","onUpdate","translationY","shouldAllowModify","OS","nextY","Reached","Pulling","onEnd","animatedStyle","transform","translateY","animatedScrollEnabled","animatedProps","top","scrollEnabled","scrollIndicatorInsets","left","bottom","right","derivedTransitionY","style","flex","Provider","transitionY","gesture","ScrollView","ref","overScrollMode","scrollEventThrottle","onContentSizeChange","_","h","offsetTop"],"sourceRoot":"..\\..\\..\\src","sources":["RefreshControl/RefreshScrollView.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ import NormalControl from "./NormalControl.js";
4
+ import RefreshScrollView from "./RefreshScrollView.js";
5
+ import RefreshFlatList from "./RefreshFlatList.js";
6
+ export { RefreshScrollView, NormalControl, RefreshFlatList };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NormalControl","RefreshScrollView","RefreshFlatList"],"sourceRoot":"..\\..\\..\\src","sources":["RefreshControl/index.tsx"],"mappings":";;AAAA,OAAOA,aAAa,MAAM,oBAAiB;AAC3C,OAAOC,iBAAiB,MAAM,wBAAqB;AACnD,OAAOC,eAAe,MAAM,sBAAmB;AAE/C,SAASD,iBAAiB,EAAED,aAAa,EAAEE,eAAe","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ import { createContext, useContext } from 'react';
4
+ export const RefreshContainerContext = /*#__PURE__*/createContext({});
5
+ export const useRefreshScroll = () => useContext(RefreshContainerContext);
6
+
7
+ /**
8
+ * Once Refresh LifeCycle:
9
+ * Idle -> Pulling -> Idle: Not reach triggleHeight, fail to refresh
10
+ * Idle -> Pulling -> Reached -> Holding -> Done -> Idle: A compelete refresh
11
+ */
12
+ export let RefreshStatus = /*#__PURE__*/function (RefreshStatus) {
13
+ /**
14
+ * Refresh normal status
15
+ */
16
+ RefreshStatus[RefreshStatus["Idle"] = 0] = "Idle";
17
+ /**
18
+ * Refresh is pulling down, and not reach triggleHeight
19
+ */
20
+ RefreshStatus[RefreshStatus["Pulling"] = 1] = "Pulling";
21
+ /**
22
+ * Refresh is pulling down continue, and reached triggleHeight
23
+ */
24
+ RefreshStatus[RefreshStatus["Reached"] = 2] = "Reached";
25
+ /**
26
+ * Refresh is Refreshing
27
+ */
28
+ RefreshStatus[RefreshStatus["Holding"] = 3] = "Holding";
29
+ /**
30
+ * Refresh is done
31
+ */
32
+ RefreshStatus[RefreshStatus["Done"] = 4] = "Done";
33
+ /**
34
+ * ScrollView Auto Load More
35
+ */
36
+ RefreshStatus[RefreshStatus["AutoLoad"] = 5] = "AutoLoad";
37
+ return RefreshStatus;
38
+ }({});
39
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","useContext","RefreshContainerContext","useRefreshScroll","RefreshStatus"],"sourceRoot":"..\\..\\..\\src","sources":["RefreshControl/type.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAsCjD,OAAO,MAAMC,uBAAuB,gBAAGF,aAAa,CAClD,CAAC,CACH,CAAC;AACD,OAAO,MAAMG,gBAAgB,GAAGA,CAAA,KAAMF,UAAU,CAACC,uBAAuB,CAAC;;AAEzE;AACA;AACA;AACA;AACA;AACA,WAAYE,aAAa,0BAAbA,aAAa;EACvB;AACF;AACA;EAHYA,aAAa,CAAbA,aAAa;EAKvB;AACF;AACA;EAPYA,aAAa,CAAbA,aAAa;EASvB;AACF;AACA;EAXYA,aAAa,CAAbA,aAAa;EAavB;AACF;AACA;EAfYA,aAAa,CAAbA,aAAa;EAiBvB;AACF;AACA;EAnBYA,aAAa,CAAbA,aAAa;EAqBvB;AACF;AACA;EAvBYA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA","ignoreList":[]}