Package2026.08.03· 4 min
Dismissible Pages That Don’t Fight Nested Scroll
How scroll_dismissible_page coordinates swipe-down-to-dismiss with ListViews and PageViews — dismiss only at the top edge.
FlutterGesturespub.dev
Gallery routes and media viewers love swipe-down-to-dismiss. Nested scrollables hate it. If you wire dismiss naively, ListViews steal the gesture or the page dismisses mid-scroll.
The rule
scroll_dismissible_page only engages dismiss when the child scroll position is at the top edge. Distance and velocity thresholds, a soft fade while dragging, and optional manual navigation keep the interaction predictable.
Usage sketch
Wrap the route content:
ScrollDismissiblePage(
backgroundColor: Colors.black,
onDismissed: () => debugPrint('dismissed'),
child: Scaffold(
backgroundColor: Colors.transparent,
body: ListView(...),
),
)Ship it once
Gesture coordination is easy to get almost right and hard to get boringly correct. Packaging it meant the next gallery screen didn’t re-litigate nested scroll physics. Available on pub.dev.