Only intercept scroll handler on iOS

The ScrollProvider wrapping and animatedProps for scroll indicator
insets are iOS-only. On other platforms, let the List use the scroll
handler from context directly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Samuel Newman
2026-02-17 12:11:09 +02:00
parent 8485ac65df
commit 58629959e8
5 changed files with 186 additions and 149 deletions
@@ -201,14 +201,7 @@ export function ProfileStarterPacks({
[isTabletOrDesktop, t.atoms.border_contrast_low],
)
return (
<View testID={testID} style={style}>
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
const list = (
<List
testID={testID ? `${testID}-flatlist` : undefined}
ref={scrollElRef}
@@ -232,9 +225,24 @@ export function ProfileStarterPacks({
ListFooterComponent={
!!data && items?.length !== 0 && isMe ? CreateAnother : undefined
}
animatedProps={animatedProps}
animatedProps={IS_IOS ? animatedProps : undefined}
/>
)
return (
<View testID={testID} style={style}>
{IS_IOS ? (
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
{list}
</ScrollProvider>
) : (
list
)}
</View>
)
}
+18 -13
View File
@@ -159,14 +159,7 @@ export function ProfileLabelsSection({
[labelerInfo, isSubscribed, numItems, t],
)
return (
<View>
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
const list = (
<List
ref={scrollElRef}
data={labelValues}
@@ -185,14 +178,26 @@ export function ProfileLabelsSection({
/>
}
ListFooterComponent={
<ListFooter
height={headerHeight + 180}
style={a.border_transparent}
/>
<ListFooter height={headerHeight + 180} style={a.border_transparent} />
}
animatedProps={animatedProps}
animatedProps={IS_IOS ? animatedProps : undefined}
/>
)
return (
<View>
{IS_IOS ? (
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
{list}
</ScrollProvider>
) : (
list
)}
</View>
)
}
+17 -9
View File
@@ -286,14 +286,7 @@ export function ProfileFeedgens({
isEmpty,
])
return (
<View testID={testID} style={style}>
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
const list = (
<List
testID={testID ? `${testID}-flatlist` : undefined}
ref={scrollElRef}
@@ -309,9 +302,24 @@ export function ProfileFeedgens({
desktopFixedHeight
onEndReached={onEndReached}
contentContainerStyle={{minHeight: height + headerOffset}}
animatedProps={animatedProps}
animatedProps={IS_IOS ? animatedProps : undefined}
/>
)
return (
<View testID={testID} style={style}>
{IS_IOS ? (
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
{list}
</ScrollProvider>
) : (
list
)}
</View>
)
}
+17 -9
View File
@@ -285,14 +285,7 @@ export function ProfileLists({
isEmpty,
])
return (
<View testID={testID} style={style}>
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
const list = (
<List
testID={testID ? `${testID}-flatlist` : undefined}
ref={scrollElRef}
@@ -308,9 +301,24 @@ export function ProfileLists({
desktopFixedHeight
onEndReached={onEndReached}
contentContainerStyle={{minHeight: height + headerOffset}}
animatedProps={animatedProps}
animatedProps={IS_IOS ? animatedProps : undefined}
/>
)
return (
<View testID={testID} style={style}>
{IS_IOS ? (
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
{list}
</ScrollProvider>
) : (
list
)}
</View>
)
}
+17 -9
View File
@@ -1045,14 +1045,7 @@ let PostFeed = ({
return {}
})
return (
<View testID={testID} style={style}>
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
const list = (
<List
testID={testID ? `${testID}-flatlist` : undefined}
ref={scrollElRef}
@@ -1081,9 +1074,24 @@ let PostFeed = ({
maxToRenderPerBatch={IS_IOS ? 5 : 1}
updateCellsBatchingPeriod={40}
onItemSeen={onItemSeen}
animatedProps={animatedProps}
animatedProps={IS_IOS ? animatedProps : undefined}
/>
)
return (
<View testID={testID} style={style}>
{IS_IOS ? (
<ScrollProvider
onScroll={onScrollWorklet}
onBeginDrag={onBeginDragFromContext}
onEndDrag={onEndDragFromContext}
onMomentumBegin={onMomentumEndFromContext}
onMomentumEnd={onMomentumEndFromContext}>
{list}
</ScrollProvider>
) : (
list
)}
</View>
)
}