over_bottom_sheet 1.0.1 copy "over_bottom_sheet: ^1.0.1" to clipboard
over_bottom_sheet: ^1.0.1 copied to clipboard

An always-visible, draggable bottom sheet widget with multiple snap points and nested scroll support.

OverBottomSheet #

pub package GitHub license CI codecov

A Flutter widget that provides an always-visible, draggable bottom sheet with multiple snap points and nested scroll support.

Features #

  • Always-visible bottom sheet overlay
  • Multiple snap points (e.g., closed, half-open, full)
  • Velocity-based fling gestures
  • Nested scroll handling (scrollable content inside sheet)
  • State callbacks (onDragStart, onDragEnd, onSnapComplete)
  • Flexible height/width constraints with auto-detect (>1.0 = pixels, ≤1.0 = ratio)
  • Material 3 theming support (showDragHandle, shadowColor, surfaceTintColor)
  • ValueNotifier-based controller for reactive updates

Demo #

Live Demo

Usage #

Basic Example #

import 'package:over_bottom_sheet/over_bottom_sheet.dart';

final controller = OverBottomSheetController();

OverBottomSheet(
  controller: controller,
  maxHeight: 0.8,   // 80% of parent height
  minHeight: 100,   // 100px fixed
  header: const Text('Header'),
  content: ListView.builder(
    itemCount: 20,
    itemBuilder: (context, index) => ListTile(title: Text('Item $index')),
  ),
  child: const Center(child: Text('Main Content')),
)

Multiple Snap Points #

OverBottomSheet(
  snapPoints: const [0.0, 0.5, 1.0], // closed, half, full
  // ...
)

Width Constraint (PC/Tablet) #

OverBottomSheet(
  maxHeight: 0.8,
  minHeight: 100,
  width: 600,       // Fixed 600px (clamped to parent)
  // or
  width: 0.5,       // 50% of parent width
  // ...
)

Drag Handle #

OverBottomSheet(
  showDragHandle: true,  // Material 3 standard drag handle
  // ...
)

Nested Scroll Handling #

While the sheet is fully open and its content is scrolled away from the top, dragging over the content does not move the sheet, so the content can be scrolled back first. The header and the drag handle always move the sheet.

OverBottomSheet(
  handleNestedScroll: true,
  content: ListView.builder(...), // Scrollable content
  // ...
)

State Callbacks #

Monitor drag and snap events for UI synchronization (e.g., map camera):

OverBottomSheet(
  onDragStart: () {
    // User started dragging
  },
  onDragEnd: (targetRatio) {
    // User released, will snap to targetRatio
  },
  onSnapComplete: (ratio) {
    // Animation finished at ratio
  },
  // ...
)

Controller Methods #

// Animate to specific position
controller.animateTo(0.5);

// Open/close shortcuts
controller.open();
controller.close();

// Listen to value changes
controller.addListener(() => print(controller.value));

Size Constraints #

Values are auto-detected:

  • > 1.0 → Fixed pixels
  • ≤ 1.0 → Ratio of parent size
Property Description
maxHeight Maximum sheet height (required)
minHeight Minimum sheet height (required)
width Sheet width (optional, defaults to full width)

API Reference #

See the API documentation for detailed information.

OverBottomSheet #

Property Type Description
controller OverBottomSheetController? Controls sheet position
maxHeight double Max height (required)
minHeight double Min height (required)
width double? Sheet width (optional)
snapPoints List<double> Snap positions (default: [0.0, 1.0])
handleNestedScroll bool Enable nested scroll handling
velocityThreshold double Fling detection threshold (default: 300.0)
showDragHandle bool? Show Material 3 drag handle
shadowColor Color? Sheet shadow color
surfaceTintColor Color? Material 3 surface tint
onDragStart VoidCallback? Called when drag begins
onDragEnd void Function(double)? Called with target snap ratio
onSnapComplete void Function(double)? Called after snap animation completes
header / headerBuilder Widget / Function Header widget
content / contentBuilder Widget / Function Sheet content
child Widget Background content (required)

License #

MIT License - see LICENSE for details.

0
likes
160
points
10
downloads

Documentation

API reference

Publisher

verified publisherkoji-1009.com

Weekly Downloads

An always-visible, draggable bottom sheet widget with multiple snap points and nested scroll support.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on over_bottom_sheet