showBottomSheet method
- WidgetBuilder builder, {
- Color? backgroundColor,
- double? elevation,
- ShapeBorder? shape,
- Clip? clipBehavior,
- BoxConstraints? constraints,
- bool? enableDrag,
- bool? showDragHandle,
- AnimationController? transitionAnimationController,
- AnimationStyle? sheetAnimationStyle,
Shows a Material Design bottom sheet in the nearest Scaffold. To show a persistent bottom sheet, use the Scaffold.bottomSheet.
Returns a controller that can be used to close and otherwise manipulate the bottom sheet.
To rebuild the bottom sheet (e.g. if it is stateful), call PersistentBottomSheetController.setState on the controller returned by this method.
The new bottom sheet becomes a LocalHistoryEntry for the enclosing ModalRoute and a back button is added to the app bar of the Scaffold that closes the bottom sheet.
The transitionAnimationController
controls the bottom sheet's entrance and
exit animations. It's up to the owner of the controller to call
AnimationController.dispose when the controller is no longer needed.
To create a persistent bottom sheet that is not a LocalHistoryEntry and does not add a back button to the enclosing Scaffold's app bar, use the Scaffold.bottomSheet constructor parameter.
A persistent bottom sheet shows information that supplements the primary content of the app. A persistent bottom sheet remains visible even when the user interacts with other parts of the app.
A closely related widget is a modal bottom sheet, which is an alternative to a menu or a dialog and prevents the user from interacting with the rest of the app. Modal bottom sheets can be created and displayed with the showModalBottomSheet function.
To create a local project with this code sample, run:
flutter create --sample=material.ScaffoldState.showBottomSheet.1 mysample
The sheetAnimationStyle
parameter is used to override the bottom sheet
animation duration and reverse animation duration.
If AnimationStyle.duration is provided, it will be used to override the bottom sheet animation duration in the underlying BottomSheet.createAnimationController.
If AnimationStyle.reverseDuration is provided, it will be used to override the bottom sheet reverse animation duration in the underlying BottomSheet.createAnimationController.
To disable the bottom sheet animation, use AnimationStyle.noAnimation.
To create a local project with this code sample, run:
flutter create --sample=material.ScaffoldState.showBottomSheet.2 mysample
- BottomSheet, which becomes the parent of the widget returned by the
builder
. - showBottomSheet, which calls this method given a BuildContext.
- showModalBottomSheet, which can be used to display a modal bottom sheet.
- Scaffold.of, for information about how to obtain the ScaffoldState.
- The Material 2 spec at m2.material.io/components/sheets-bottom.
- The Material 3 spec at m3.material.io/components/bottom-sheets/overview.
- AnimationStyle, which is used to override the modal bottom sheet animation duration and reverse animation duration.
Implementation
PersistentBottomSheetController showBottomSheet(
WidgetBuilder builder, {
Color? backgroundColor,
double? elevation,
ShapeBorder? shape,
Clip? clipBehavior,
BoxConstraints? constraints,
bool? enableDrag,
bool? showDragHandle,
AnimationController? transitionAnimationController,
AnimationStyle? sheetAnimationStyle,
}) {
assert(() {
if (widget.bottomSheet != null) {
throw FlutterError(
'Scaffold.bottomSheet cannot be specified while a bottom sheet '
'displayed with showBottomSheet() is still visible.\n'
'Rebuild the Scaffold with a null bottomSheet before calling showBottomSheet().',
);
}
return true;
}());
assert(debugCheckHasMediaQuery(context));
_closeCurrentBottomSheet();
final AnimationController controller = (transitionAnimationController
?? BottomSheet.createAnimationController(this, sheetAnimationStyle: sheetAnimationStyle))
..forward();
setState(() {
_currentBottomSheet = _buildBottomSheet(
builder,
isPersistent: false,
animationController: controller,
backgroundColor: backgroundColor,
elevation: elevation,
shape: shape,
clipBehavior: clipBehavior,
constraints: constraints,
enableDrag: enableDrag,
showDragHandle: showDragHandle,
shouldDisposeAnimationController: transitionAnimationController == null,
);
});
return _currentBottomSheet!;
}