The events onBeginDrag, onEndDrag, onMomentumBegin, and onMomentumEnd don't fire for my FlatList (created with Reanimated.createAnimatedComponent(FlatList)). Only onScroll works.
Reanimated.createAnimatedComponent(FlatList)useAnimatedScrollHandler:const onScroll = useAnimatedScrollHandler<{ beginY?: number; endY?: number }>({
onScroll: (event, context) => {
Logger.debug(`[SCROLL] SCROLL! ${event.contentOffset.y}`);
scrollY.value = event.contentOffset.y;
},
onBeginDrag: (event) => {
Logger.debug(`[SCROLL] BEGIN DRAG! ${event.contentOffset.y}`);
},
onEndDrag: (event) => {
Logger.debug(`[SCROLL] END DRAG! ${event.contentOffset.y}`);
},
onMomentumBegin: (event) => {
Logger.debug(`[SCROLL] BEGIN MOMENTUM! ${event.contentOffset.y}`);
},
onMomentumEnd: (event) => {
Logger.debug(`[SCROLL] END MOMENTUM! ${event.contentOffset.y}`);
},
});
FlatList: <ReanimatedFlatList onScroll={onScroll} ... />SCROLL! in console, no begin/end eventsI expect the begin and end events to fire
They don't fire
const onScroll = useAnimatedScrollHandler<{ beginY?: number; endY?: number }>({
onScroll: (event, context) => {
Logger.debug(`[SCROLL] SCROLL! ${event.contentOffset.y}`);
scrollY.value = event.contentOffset.y;
},
onBeginDrag: (event) => {
Logger.debug(`[SCROLL] BEGIN DRAG! ${event.contentOffset.y}`);
},
onEndDrag: (event) => {
Logger.debug(`[SCROLL] END DRAG! ${event.contentOffset.y}`);
},
onMomentumBegin: (event) => {
Logger.debug(`[SCROLL] BEGIN MOMENTUM! ${event.contentOffset.y}`);
},
onMomentumEnd: (event) => {
Logger.debug(`[SCROLL] END MOMENTUM! ${event.contentOffset.y}`);
},
});
And
return <ReanimatedFlatList onScroll={onScroll} ... />
Hi. Did you use FlatList with createAnimatedComponent?
@terrysahaidak Yes. Also the onScroll event does get fired, it's just the begin/end events that don't
Could you try with custom scroll component?
@terrysahaidak Are you talking about the FlatList's scroll component prop?
yes, exactly
On my side it's working nicely using this configuration I found in another issue :
AnimatedFlatList.ts
const FlatListWithEventThrottle = forwardRef((props, ref) => (
<FlatList
{...props}
scrollEventThrottle={0.0001}
// @ts-ignore
ref={ref}
/>
));
export const AnimatedFlatList: typeof FlatList = Animated.createAnimatedComponent(
FlatListWithEventThrottle
);
And then using it like that :
<AnimatedFlatList
{...props}
keyExtractor={keyExtractor}
onScroll={scrollHandler}
data={data}
/>
You can safely use 1 or even 16 instead.
I've managed to get it working now (alpha7). No idea what the issue was, maybe it was some sort of cache issue (hot reload, metro, babel, whatever). Closing this
Most helpful comment
You can safely use 1 or even 16 instead.