Back to Blog
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.