How Do I Use React Native Draggable Flatlist?

You can use the PanResponder and Animated APIs in react-native to create a draggable FlatList. Here's a code snippet that demonstrates how to do it:

import React, { useRef, useState } from 'react';
import { View, Text, FlatList, PanResponder, Animated } from 'react-native';

const DraggableFlatList = () => {
  const panResponder = useRef(
      onMoveShouldSetPanResponder: (evt, gestureState) => {
        // Only start moving the item if the user has moved the item more than
        // 10 pixels in any direction
        return (
          Math.abs(gestureState.dx) > 10 || Math.abs(gestureState.dy) > 10
      onPanResponderMove: (evt, gestureState) => {
        // Update the item's position as the user moves it
        itemRef.current.setValue({ x: gestureState.dx, y: gestureState.dy });
      onPanResponderRelease: (evt, gestureState) => {
        // The user has released the item, so reset the item's position
        itemRef.current.setValue({ x: 0, y: 0 });

  const [items, setItems] = useState([
    { key: 'Item 1', backgroundColor: 'red' },
    { key: 'Item 2', backgroundColor: 'green' },
    { key: 'Item 3', backgroundColor: 'blue' },

  const itemRef = useRef(new Animated.ValueXY()).current;

  const renderItem = ({ item }) => {
    return (
          transform: [{ translateX: itemRef.x }, { translateY: itemRef.y }],
          backgroundColor: item.backgroundColor,

  return (

export default DraggableFlatList;

This code creates a FlatList that displays a list of items that the user can drag around the screen. When the user starts dragging an item, the onMoveShouldSetPanResponder function is called, which starts the pan responder and allows the user to move the item. The onPanResponderMove function is then called as the user moves the item, and updates the position of the item using the setValue method of the Animated.ValueXY object. When the user releases the item, the onPanResponderRelease function is called, which resets the position of the item back to its original position.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.