sticky_hierarchical_scroll
VS Code-style sticky headers for hierarchical Flutter lists.
Part of flutter_scroll_kit — composable Flutter scroll primitives.
Section headers stick to the top of the viewport as the user scrolls, maintaining a breadcrumb trail of the current position in the hierarchy. When a section ends, its header pushes out smoothly — matching VS Code's tree Sticky Scroll behavior.
Features
- Hierarchical sticky headers — nested sections stack in depth order
- Push-out animation — outgoing headers slide up as their scope ends
- Click-to-navigate — tap a sticky header to scroll to that section
- Fixed-height rows — optimized for uniform item extents
- Configurable depth — limit the maximum number of sticky headers
Usage
StickyHierarchicalScrollView<MyItem>(
items: items,
getLevel: (item) => item.level,
isSection: (item) => item.isSection,
itemExtent: 32.0,
config: StickyScrollConfig<MyItem>(
maxStickyHeaders: 3,
stickyDecoration: BoxDecoration(color: Colors.grey[900]),
stickyHeaderBuilder: (context, candidate) {
return Text(candidate.data.label);
},
),
itemBuilder: (context, item, index) {
return Text(item.label);
},
)
Parameters
| Parameter | Description |
|---|---|
items |
Flat list of all items (sections and leaves) |
getLevel |
Returns the hierarchical depth of an item. 0-based: root is level 0, children level 1, etc. Negative levels are not supported |
isSection |
Returns true for items that should stick |
itemExtent |
Fixed pixel height of every row |
config |
Sticky behavior configuration (see below) |
controller |
Optional external ScrollController |
physics |
Scroll physics (default: platform default) |
onStickyHeaderTap |
Custom tap handler (overrides default scroll-to) |
StickyScrollConfig
| Property | Default | Description |
|---|---|---|
stickyHeaderBuilder |
required | Builds the widget for each sticky header |
maxStickyHeaders |
5 |
Maximum headers shown simultaneously |
enableNavigation |
true |
Tap headers to scroll to that section |
stickyDecoration |
BoxDecoration(color: #1E1E1E) |
Decoration for each sticky header (supports gradients, borders, shadows) |
StickyCandidate
The stickyHeaderBuilder receives a StickyCandidate<T> with:
data— the original item of typeTlevel— hierarchical depth (0-based; root is level 0)originalIndex— position in the flat item list
Example
See the example app for a complete file-tree demo.
cd example
flutter run
Libraries
- sticky_hierarchical_scroll
- VSCode-inspired sticky hierarchical scroll view for Flutter.