Skip to content

Duplicate sticky header appears when scrolling or collapsing section #1959

@EveJulliard

Description

@EveJulliard

Description

After upgrading to FlashList v2.0.2 and enabling the New Architecture, we’ve started experiencing regressions related to sticky header rendering — especially when using multiple sticky headers and a collapsible section.

Current behavior

When scrolling down to a section with a sticky header, the header briefly appears twice — one in its list position and one in the sticky position — as if the sticky instance were rendered too early.
This results in a visible flicker or duplication effect.

Header appears twice Collapsed header overlapped with itself
Image https://github.com/user-attachments/assets/4d7e1b96-1d3d-4f0c-a0d1-16bc69b94bee

Additionally, we have a collapsible header separating the first section of our list. When this header is collapsed, there’s a clear overlap between two instances of the same header (one inline, one sticky).
To make this behavior more noticeable, we applied a different borderBottomColor to the collapsible header, which highlights that both headers are being rendered at the same time.

Expected behavior

Sticky headers should remain smooth and stable while scrolling.
At any given time, only one instance of a header (either inline or sticky) should be visible.
Collapsing a section should not cause the sticky and inline versions of that header to overlap or duplicate.

Reproduction

Expo Snack or minimal reproduction link:

Expo Snack Repro

Platform

  • iOS
  • Android
  • Web (if applicable)

Environment

React Native info output:

System:
OS: macOS 15.4.1
CPU: (10) arm64 Apple M1 Pro
Memory: 182.48 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.18.0
path: /Users/evej/Library/Caches/fnm_multishells/34718_1760968506490/bin/node
Yarn:
version: 4.5.1
path: /opt/homebrew/bin/yarn
npm:
version: 10.8.2
path: /Users/evej/Library/Caches/fnm_multishells/34718_1760968506490/bin/npm
Watchman: Not Found
Managers:
CocoaPods:
version: 1.16.2
path: /Users/evej/.rvm/gems/ruby-2.7.5/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 24.4
- iOS 18.4
- macOS 15.4
- tvOS 18.4
- visionOS 2.4
- watchOS 11.4
Android SDK: Not Found
IDEs:
Android Studio: 2025.1 AI-251.26094.121.2513.14007798
Xcode:
version: 16.3/16E140
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.15
path: /usr/bin/javac
Ruby:
version: 2.7.5
path: /Users/evej/.rvm/rubies/ruby-2.7.5/bin/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.0.2
wanted: latest
react:
installed: 19.1.0
wanted: 19.1.0
react-native:
installed: 0.81.4
wanted: 0.81.4
react-native-macos: Not Found
npmGlobalPackages:
"react-native": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: true
newArchEnabled: true

FlashList version: 2.1.0

Additional context

For now we just made the header 1 not collapsable but it is a product regression

Checklist

  • I've searched existing issues and couldn't find a duplicate
  • I've provided a minimal reproduction (Expo Snack preferred)
  • I'm using the latest version of @shopify/flash-list
  • I've included all required information above

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions