over_bottom_sheet 1.0.0 copy "over_bottom_sheet: ^1.0.0" to clipboard
over_bottom_sheet: ^1.0.0 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 #

Enable smooth scrolling inside the sheet content:

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
22
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