flutterfx_bottom_sheet

A Flutter bottom sheet widget with a smooth scale-and-slide entrance animation, drag-to-dismiss, and a fully customisable style system. Part of the FlutterFX collection.

Bottom Sheet Preview


Features

  • Scale + slide animation on the main content when the sheet opens
  • Drag-to-dismiss with velocity-aware snapping
  • FxBottomSheetController for programmatic open() / close() / toggle()
  • FxBottomSheetStyle with light() and dark() presets plus copyWith()
  • Zero external dependencies — Flutter SDK only

Installation

dependencies:
  flutterfx_bottom_sheet: ^1.0.0

Basic usage

import 'package:flutterfx_bottom_sheet/flutterfx_bottom_sheet.dart';

class MyPage extends StatefulWidget {
  const MyPage({super.key});
  @override
  State<MyPage> createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  final _controller = FxBottomSheetController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        bottom: false,
        child: FxBottomSheet(
          controller: _controller,
          mainContent: _MyMainScreen(onOpen: _controller.open),
          drawerContent: const _MySheetContent(),
        ),
      ),
    );
  }
}

Customisation

Presets

// Light (default)
FxBottomSheet(style: FxBottomSheetStyle.light(), ...)

// Dark
FxBottomSheet(style: FxBottomSheetStyle.dark(), ...)

Fine-tuning with copyWith

FxBottomSheet(
  style: FxBottomSheetStyle.dark().copyWith(
    topBorderRadius: 28,
    mainContentScale: 0.90,   // less dramatic scale
    mainContentSlide: 16,     // less upward slide
  ),
  maxHeight: 0.75,            // sheet takes 75% of screen height
  ...
)

Full parameter list

Parameter Type Default Description
mainContent Widget required Content rendered behind the sheet
drawerContent Widget required Content inside the sheet
controller FxBottomSheetController? — Programmatic control
maxHeight double 0.90 Fractional height when fully open
minHeight double 0.0 Fractional height when closed
animationDuration Duration 300 ms Open/close speed
style FxBottomSheetStyle light preset Visual configuration

FxBottomSheetStyle fields

Field Description
backgroundColor Sheet panel background
barrierColor Dimming overlay colour
handleColor Drag handle pill colour
handleWidth / handleHeight Handle pill dimensions
topBorderRadius Top-edge corner radius
boxShadow Shadow on the sheet panel
mainContentScale Scale target for main content (0.85 default)
mainContentSlide Upward slide in pixels (24 default)

FxBottomSheetController

final controller = FxBottomSheetController();

controller.open();    // slide sheet up
controller.close();   // slide sheet down
controller.toggle();  // open if closed, close if open
controller.isOpen;    // bool getter

// dispose when your widget is disposed
@override
void dispose() {
  controller.dispose();
  super.dispose();
}

Part of FlutterFX

Visit flutterfx.com for the full widget catalogue.

Libraries

bottom_sheet_fx
FlutterFX Bottom Sheet