smart_bottom_sheet 1.0.1
smart_bottom_sheet: ^1.0.1 copied to clipboard
A smart, feature-rich Flutter bottom sheet package with snap points, physics-based dragging, form, stepper, confirmation, and rating sheets.
Smart Bottom Sheet #
A smart, feature-rich Flutter bottom sheet package with snap points, physics-based dragging, stacking, form, stepper, confirmation, and rating sheets.
Features #
- ๐ฏ Action Menu Sheet โ quick actions list with icons and destructive styling
- โ Snap Sheet โ 3 snap points (peek, half, full) with velocity-based snapping and rubber-band physics
- ๐ Form Sheet โ keyboard-aware inline forms with validation
- โ ๏ธ Confirm Sheet โ thumb-friendly replacement for AlertDialog
- ๐ช Stepper Sheet โ multi-step flow inside a single sheet with progress indicator
- โญ Rating Sheet โ animated star picker with optional comment field
- ๐จ Fully customizable โ colors, border radius, handle, backdrop
- ๐ Dark mode support out of the box
Getting Started #
Add to your pubspec.yaml:
dependencies:
smart_bottom_sheet: ^1.0.0
Then run:
flutter pub get
Import in your Dart file:
import 'package:smart_bottom_sheet/smart_bottom_sheet.dart';
Usage #
Action Menu Sheet #
ActionMenuSheet.show(
context,
title: 'File Options',
subtitle: 'document.pdf',
actions: [
SheetAction(
icon: Icons.share_rounded,
label: 'Share',
onTap: () {},
),
SheetAction(
icon: Icons.delete_rounded,
label: 'Delete',
isDestructive: true,
onTap: () {},
),
],
);
Snap Sheet #
SnapSheet.show(
context,
initialSnap: SnapPoint.half,
child: YourScrollableWidget(),
);
Form Sheet #
FormSheet.show(
context,
title: 'Add Address',
fields: [
SheetField.text('Full Name', isRequired: true),
SheetField.phone('Phone Number', isRequired: true),
SheetField.multiline('Notes', hint: 'Any instructions?'),
],
onSubmit: (data) {
print(data['Full Name']);
},
);
Confirm Sheet #
ConfirmSheet.show(
context,
icon: Icons.delete_rounded,
iconColor: SheetColor.danger,
title: 'Delete this item?',
message: 'This action cannot be undone.',
confirmLabel: 'Yes, Delete',
isDangerous: true,
onConfirm: () {
// handle delete
},
);
Stepper Sheet #
StepperSheet.show(
context,
title: 'Place Order',
steps: [
SheetStep(
title: 'Bag',
child: YourBagWidget(),
),
SheetStep(
title: 'Address',
child: YourAddressWidget(),
),
SheetStep(
title: 'Payment',
child: YourPaymentWidget(),
),
],
onComplete: () {
// order placed
},
);
Rating Sheet #
RatingSheet.show(
context,
title: 'How was your order?',
subtitle: 'Burger King ยท Zomato Gold',
showComment: true,
onSubmit: (stars, comment) {
print('Rated $stars stars');
},
);
Customization #
Every sheet accepts a SheetConfig for global customization:
SheetConfig(
peekHeight: 90, // peek snap height in pixels
halfHeight: 0.45, // half snap as screen fraction
isDismissible: true, // swipe down to dismiss
showHandle: true, // show drag handle bar
backgroundColor: Colors.white,
borderRadius: BorderRadius.vertical(
top: Radius.circular(24),
),
)
Additional Information #
- ๐ฆ pub.dev
- ๐ File an issue
- ๐ค Contributions welcome โ open a PR!
License #
MIT License โ see LICENSE file for details.