A React Native FlatList with collapsible header that smoothly disappears on scroll
npm install react-native-flatlist-collapsible-headerA reusable React Native FlatList with a smooth collapsible animated header, built using react-native-reanimated.
The header smoothly fades, translates, and optionally scales away as the user scrolls.
Ideal for feeds, profile screens, dashboards, and modern mobile UIs.
---
- ⚡ Smooth animations powered by react-native-reanimated
- 🎯 Fully typed with TypeScript
- 🧩 Drop-in replacement for FlatList
- 🎛 Configurable animation behavior
- 📱 Optimized for performance
- 🧠 Clean and simple API
---
Demo of the collapsible header behavior:
Using npm:
``sh`
npm install react-native-flatlist-collapsible-header
or
yarn add react-native-flatlist-collapsible-header
This library depends on the following peer dependency:
- react-native-reanimated v2+
If you haven't installed or configured it yet, follow the official installation guide:
https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation
`tsx
import { AnimatedHeaderFlatList } from 'react-native-flatlist-collapsible-header';
headerHeight={400}
renderHeader={() =>
renderItem={({ item }) =>
keyExtractor={(item) => item.id}
/>;
`
| Prop | Type | Required | Default | Description |
| --------------------------- | ---------------------- | -------- | ------- | ----------------------------------------------------- |
| data | T[] | ✅ | — | Data array for the FlatList |renderItem
| | ListRenderItem | ✅ | — | Function to render each item |keyExtractor
| | (item: T) => string | ✅ | — | Extracts unique keys |headerHeight
| | number | ✅ | — | Height of the header in pixels |renderHeader
| | React.ReactNode | ✅ | — | Header component to render |hideThreshold
| | number | ❌ | 0.5 | Percentage (0–1) of header height before fully hidden |headerContainerStyle
| | ViewStyle | ❌ | — | Style override for the header container |contentContainerStyle
| | StyleProp | ❌ | — | Styles for FlatList content |scrollEventThrottle
| | number | ❌ | 16 | Scroll event frequency |animationConfig.fadeOut
| | boolean | ❌ | true | Fade header while scrolling |animationConfig.translate
| | boolean | ❌ | true | Translate header vertically |animationConfig.scale
| | boolean | ❌ | false | Scale header during scroll |onScroll
| | (event) => void | ❌ | — | Optional scroll listener |
> ✅ All standard FlatList props are supported.
Contributions are welcome!
- Development workflow
- Sending a pull request
- Code of conduct
`tsx`
renderHeader={() =>
animationConfig={{
fadeOut: true,
translate: true,
scale: true,
}}
/>
- Requires react-native-reanimated v2+
- Header uses absolute positioning
- Avoid using margins for header layout
- Best performance with scrollEventThrottle={16}`
MIT © Momen Mustafa
---
Made with ❤️ using create-react-native-library