Package selection guidance compiled from public package information, community data, and project usage.
A high-performance slidable panel widget for Flutter that supports dynamic action positioning and expanding action items during opening. Ideal for interactive UIs where users need to reveal actions or content through sliding gestures. The panel is optimized for smooth performance across multiple platforms, including mobile, web, and desktop. It provides a clean API for customizing behavior and appearance, making it suitable for swipeable menus, bottom sheets, or contextual action panels.
Use cases
Swipe-to-reveal action menus
Interactive bottom sheets
Contextual controls in lists
Gesture-driven content expansion
Mobile and desktop responsive panels
Key features
High-performance rendering
Expandable action items on open
Flexible action positioning
Cross-platform support
Customizable animation
Smooth gesture handling
Suitable for
Developers building interactive list interfaces
Apps needing swipeable action panels
Projects targeting multiple platforms
UIs with dynamic content reveal
Teams prioritizing performance and UX
Considerations
May require additional styling for complex layouts
Limited built-in theming options
Best suited for simple to moderately complex interactions
Not ideal for deeply nested navigation
Requires careful handling of gesture conflicts
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
A high-performant slidable Panel that can show actions in different positions, and also can expand the action item when the panel is opening
Features
this package uses some syntax sugar of Dart 3.0, please create issues if you want to use this package in Dart 2.x, I will remove those syntax sugars and migrate it to Dart 2.x
When the panel is closed/dismissed, no actions would be painted and laid out.
The animation of actions (e.g., expanding/collapsing a specific action) will be scoped and not result in the re-layout and re-painting of the entire SlidablePanel
control the SlidablePanel and actions programmatically using SlideController, not limited to gestures.
All action widgets can be expanded when the SlidablePanel is opening.
Different Motions
ActionMotion.drawer
ActionMotion.scroll
ActionMotion.behind
Disable gesture sliding
By setting gestureDisabled: true, you could avoid gesture sliding and continue sliding via SlideController programmatically
SlidablePanel(
...
gestureDisabled: true,
...
)
Initial Opened Position
By specifying the initOpenedPosition of SlideController, you could open actions at the initOpenedPosition without using WidgetsBinding.instance.addPostFrameCallback.
you should ensure there are actions at the specified initOpenedPosition
usePreActionController indicates if you want to enable expanding/collapsing the pre actions
usePostActionController indicates if you want to enable expanding/collapsing the post actions.
if [usePreActionController] or [usePostActionController] is set to true, the corresponding [ActionController] would be created and bound to [RenderSlideAction] automatically
invoking [SlideController.expand]/[SlideController.collapse]/[SlideController.toggleAction] only takes effects for two cases:
[usePreActionController] is true and the current [openedPosition] is [ActionPosition.pre]
[usePostActionController] is true and the current [openedPosition] is [ActionPosition.post]
use different motion and alignment at different positions
SlidablePanel.preActionLayout and SlidablePanel.postActionLayout accept ActionLayout as parameters.
You could determine how to layout the actions at the different positions by specifying:
when using ActionAlignment.flex, you could give an action a specific flex value using ActionItem. Other actions not wrapped in ActionItem would have a default flex value of 1.
ActionAlignment.spaceEvenly would ignore ActionItem