BottomSheetExpandableRoute<T> class
A highly customizable expandable bottom sheet route that can be opened from the top or bottom.
This class provides a PopupRoute that displays a bottom sheet which can expand and contract
based on user interaction or programmatic control. It supports opening from both the top
and the bottom of the screen, and offers extensive customization options for appearance and behavior.
Example:
Navigator.of(context).push(
BottomSheetExpandableRoute(
builder: (context) => YourContent(),
initialChildSize: 0.5,
minChildSize: 0.25,
maxChildSize: 0.9,
),
);
- Inheritance
-
- Object
- Route<
T> - OverlayRoute<
T> - TransitionRoute<
T> - ModalRoute<
T> - PopupRoute<
T> - BottomSheetExpandableRoute
Constructors
-
BottomSheetExpandableRoute({required WidgetBuilder builder, ThemeData? theme, String? barrierLabel, Color? backgroundColor, bool isPersistent = false, double? elevation, ShapeBorder? shape, Clip? clipBehavior, Color? modalBarrierColor, bool isDismissible = true, bool enableDrag = true, bool isScrollControlled = true, GlobalKey<
ScaffoldState> ? scaffoldKey, GlobalKey<ScaffoldMessengerState> ? messengerKey, RouteSettings? settings, Duration enterBottomSheetDuration = const Duration(milliseconds: 250), Duration exitBottomSheetDuration = const Duration(milliseconds: 200), Curve? curve, double initialChildSize = 0.5, double minChildSize = 0.03, double maxChildSize = 1.0, double borderRadius = 15.0, bool startFromTop = false, bool snap = false, bool isShowCloseBottom = true, IconData closeIcon = Icons.close, Color? closeIconColor, Color indicatorColor = const Color.fromRGBO(224, 224, 224, 1), double? itemPaddingTop = 60}) - Creates a customizable expandable bottom sheet route.
Properties
- allowSnapshotting → bool
-
Whether the route transition will prefer to animate a snapshot of the
entering/exiting routes.
no setterinherited
-
animation
→ Animation<
double> ? -
The animation that drives the route's transition and the previous route's
forward transition.
no setterinherited
- backgroundColor → Color?
-
The background color of the bottom sheet.
final
- barrierColor → Color
-
The color of the modal barrier that darkens the background behind the bottom sheet.
no setteroverride
- barrierCurve → Curve
-
The curve that is used for animating the modal barrier in and out.
no setterinherited
- barrierDismissible → bool
-
Whether tapping on the modal barrier should dismiss the bottom sheet. This is linked to isDismissible.
no setteroverride
- barrierLabel → String?
-
The semantic label used for a dismissible barrier.
final
- borderRadius → double
-
The radius of the top corners of the bottom sheet (when startFromTop is false)
or the bottom corners (when startFromTop is true).
final
- builder → WidgetBuilder
-
A builder function that returns the widget tree representing the content of the bottom sheet.
final
- canPop → bool
-
Whether this route can be popped.
no setterinherited
- clipBehavior → Clip?
-
The clipping behavior of the bottom sheet.
final
- closeIcon → IconData
-
closeIcon - The icon to use for the close button.
final
- closeIconColor → Color?
-
closeIconColor - The color of the close button icon.
final
-
completed
→ Future<
T?> -
This future completes only once the transition itself has finished, after
the overlay entries have been removed from the navigator's overlay.
no setterinherited
- controller → AnimationController?
-
The animation controller that the route uses to drive the transitions.
no setterinherited
- currentResult → T?
-
When this route is popped (see Navigator.pop) if the result isn't
specified or if it's null, this value will be used instead.
no setterinherited
- curve → Curve?
-
The curve to use for the animation that slides the bottom sheet into and out of view.
final
- debugLabel → String
-
A short description of this route useful for debugging.
no setterinherited
- delegatedTransition → DelegatedTransitionBuilder?
-
The DelegatedTransitionBuilder provided to the route below this one in the
navigation stack.
no setterinherited
- directionalTraversalEdgeBehavior → TraversalEdgeBehavior?
-
Controls the directional transfer of focus beyond the first and the last
items of a FocusScopeNode.
finalinherited
- elevation → double?
-
The elevation of the bottom sheet.
final
- enableDrag → bool
-
Whether the bottom sheet can be dragged by the user.
final
- enterBottomSheetDuration → Duration
-
The duration of the animation that slides the bottom sheet into view.
final
- exitBottomSheetDuration → Duration
-
The duration of the animation that slides the bottom sheet out of view.
final
- filter → ImageFilter?
-
The filter to add to the barrier.
finalinherited
- finishedWhenPopped → bool
-
Controls whether didPop calls NavigatorState.finalizeRoute.
no setterinherited
- fullscreenDialog → bool
-
Whether this route is a full-screen dialog.
no setterinherited
- hasActiveRouteBelow → bool
-
Whether there is at least one active route underneath this route.
no setterinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- hasScopedWillPopCallback → bool
-
True if one or more WillPopCallback callbacks exist.
no setterinherited
- impliesAppBarDismissal → bool
-
Whether an AppBar in the route should automatically add a back button or
close button.
no setterinherited
- indicatorColor → Color
-
indicatorColor - The color of the indicator.
final
- initialChildSize → double
-
The initial size of the bottom sheet, expressed as a fraction of the screen height.
final
- isActive → bool
-
Whether this route is on the navigator.
no setterinherited
- isCurrent → bool
-
Whether this route is the top-most route on the navigator.
no setterinherited
- isDismissible → bool
-
Whether the bottom sheet can be dismissed by tapping on the modal barrier.
final
- isFirst → bool
-
Whether this route is the bottom-most active route on the navigator.
no setterinherited
- isPersistent → bool
-
Whether the bottom sheet should be persistent.
final
- isScrollControlled → bool
-
Whether the bottom sheet's height is determined by its content.
final
- isShowCloseBottom → bool
-
Creates the animation for the bottom sheet's entrance and exit transitions.
isShowCloseBottom - Whether to show the close button at the bottom.
final
- itemPaddingTop → double?
-
final
- maintainState → bool
-
Whether the route should remain in memory when it is inactive.
no setterinherited
- maxChildSize → double
-
The maximum size of the bottom sheet, expressed as a fraction of the screen height.
final
-
messengerKey
→ GlobalKey<
ScaffoldMessengerState> ? -
A key to access the
ScaffoldMessengerState.final - minChildSize → double
-
The minimum size of the bottom sheet, expressed as a fraction of the screen height.
final
- modalBarrierColor → Color?
-
The color of the modal barrier that darkens the background behind the bottom sheet.
final
-
The navigator that the route is in, if any.
no setterinherited
- offstage ↔ bool
-
Whether this route is currently offstage.
getter/setter pairinherited
- opaque → bool
-
Whether the route obscures previous routes when the transition is complete.
no setterinherited
-
overlayEntries
→ List<
OverlayEntry> -
The overlay entries of this route.
no setterinherited
- popDisposition → RoutePopDisposition
-
Returns RoutePopDisposition.doNotPop if any of the PopEntry instances
registered with registerPopEntry have PopEntry.canPopNotifier set to
false.
no setterinherited
- popGestureEnabled → bool
-
Whether a pop gesture can be started by the user for this route.
no setterinherited
- popGestureInProgress → bool
-
True if a back gesture (iOS-style back swipe or Android predictive back)
is currently underway for this route.
no setterinherited
-
popped
→ Future<
T?> -
A future that completes when this route is popped off the navigator.
no setterinherited
- receivedTransition ↔ DelegatedTransitionBuilder?
-
The DelegatedTransitionBuilder received from the route above this one in
the navigation stack.
getter/setter pairinherited
- requestFocus → bool
-
When the route state is updated, request focus if the current route is at the top.
no setterinherited
-
restorationScopeId
→ ValueListenable<
String?> -
The restoration scope ID to be used for the RestorationScope surrounding
this route.
no setterinherited
- reverseTransitionDuration → Duration
-
The duration the transition going in reverse.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
scaffoldKey
→ GlobalKey<
ScaffoldState> ? -
A key to access the
ScaffoldStateof the internalScaffoldused to display the bottom sheet.final -
secondaryAnimation
→ Animation<
double> ? -
The animation for the route being pushed on top of this route. This
animation lets this route coordinate with the entrance and exit transition
of route pushed on top of this route.
no setterinherited
- semanticsDismissible → bool
-
Whether the semantics of the modal barrier are included in the
semantics tree.
no setterinherited
- settings → RouteSettings
-
The settings for this route.
no setterinherited
- shape → ShapeBorder?
-
The shape of the bottom sheet.
final
- snap → bool
-
Whether the bottom sheet should snap to initialChildSize, minChildSize or maxChildSize.
final
- startFromTop → bool
-
Whether the bottom sheet should open from the top of the screen instead of the bottom.
final
- subtreeContext → BuildContext?
-
The build context for the subtree containing the primary content of this route.
no setterinherited
- theme → ThemeData?
-
The theme to apply to the bottom sheet.
final
- transitionDuration → Duration
-
The duration of the transition when the bottom sheet is pushed onto the navigation stack.
no setteroverride
- traversalEdgeBehavior → TraversalEdgeBehavior?
-
Controls the transfer of focus beyond the first and the last items of a
FocusScopeNode.
finalinherited
- willDisposeAnimationController ↔ bool
-
Whether to takeover the controller created by createAnimationController.
getter/setter pairinherited
- willHandlePopInternally → bool
-
Whether calling didPop would return false.
no setterinherited
Methods
-
addLocalHistoryEntry(
LocalHistoryEntry entry) → void -
Adds a local history entry to this route.
inherited
-
addScopedWillPopCallback(
WillPopCallback callback) → void -
Enables this route to veto attempts by the user to dismiss it.
inherited
-
buildModalBarrier(
) → Widget -
Build the barrier for this ModalRoute, subclasses can override
this method to create their own barrier with customized features such as
color or accessibility focus size.
inherited
-
buildPage(
BuildContext context, Animation< double> animation, Animation<double> secondaryAnimation) → Widget -
Builds the bottom sheet's UI.
override
-
buildTransitions(
BuildContext context, Animation< double> animation, Animation<double> secondaryAnimation, Widget child) → Widget -
Override this method to wrap the
childwith one or more transition widgets that define how the route arrives on and leaves the screen.inherited -
canTransitionFrom(
TransitionRoute previousRoute) → bool -
Returns true if
previousRouteshould animate when this route is pushed on top of it or when then this route is popped off of it.inherited -
canTransitionTo(
TransitionRoute nextRoute) → bool -
Returns true if this route supports a transition animation that runs
when
nextRouteis pushed on top of it or whennextRouteis popped off of it.inherited -
changedExternalState(
) → void -
Called whenever the Navigator has updated in some manner that might
affect routes, to indicate that the route may wish to rebuild as well.
inherited
-
changedInternalState(
) → void -
Called whenever the internal state of the route has changed.
inherited
-
createAnimation(
) → Animation< double> -
Called to create the animation that exposes the current progress of
the transition controlled by the animation controller created by
createAnimationController().
override
-
createAnimationController(
) → AnimationController -
Creates the animation controller for managing the bottom sheet's animations.
override
-
createOverlayEntries(
) → Iterable< OverlayEntry> -
Subclasses should override this getter to return the builders for the overlay.
inherited
-
createSimulation(
{required bool forward}) → Simulation? -
Creates the simulation that drives the transition animation for this route.
inherited
-
debugTransitionCompleted(
) → bool -
Returns true if the transition has completed.
inherited
-
didAdd(
) → void -
Called after install when the route is added to the navigator.
inherited
-
didChangeNext(
Route? nextRoute) → void -
This route's next route has changed to the given new route.
inherited
-
didChangePrevious(
Route? previousRoute) → void -
This route's previous route has changed to the given new route.
inherited
-
didComplete(
T? result) → void -
The route was popped or is otherwise being removed somewhat gracefully.
inherited
-
didPop(
T? result) → bool -
A request was made to pop this route. If the route can handle it
internally (e.g. because it has its own stack of internal state) then
return false, otherwise return true (by returning the value of calling
super.didPop). Returning false will prevent the default behavior of NavigatorState.pop.inherited -
didPopNext(
Route nextRoute) → void -
The given route, which was above this one, has been popped off the
navigator.
inherited
-
didPush(
) → TickerFuture -
Called after install when the route is pushed onto the navigator.
inherited
-
didReplace(
Route? oldRoute) → void -
Called after install when the route replaced another in the navigator.
inherited
-
dispose(
) → void -
Disposes of the animation controller and reports the route disposal.
override
-
handleCancelBackGesture(
) → void -
Handles a predictive back gesture ending in cancellation.
inherited
-
handleCommitBackGesture(
) → void -
Handles a predictive back gesture ending successfully.
inherited
-
handleStartBackGesture(
{double progress = 0.0}) → void -
Handles a predictive back gesture starting.
inherited
-
handleUpdateBackGestureProgress(
{required double progress}) → void -
Handles a predictive back gesture updating as the user drags across the
screen.
inherited
-
install(
) → void -
Called when the route is inserted into the navigator.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
onPopInvoked(
bool didPop) → void -
Called after a route pop was handled.
inherited
-
onPopInvokedWithResult(
bool didPop, T? result) → void -
Called after a route pop was handled.
inherited
-
registerPopEntry(
PopEntry< Object?> popEntry) → void -
Registers the existence of a PopEntry in the route.
inherited
-
removeLocalHistoryEntry(
LocalHistoryEntry entry) → void -
Remove a local history entry from this route.
inherited
-
removeScopedWillPopCallback(
WillPopCallback callback) → void -
Remove one of the callbacks run by willPop.
inherited
-
setState(
VoidCallback fn) → void -
Schedule a call to buildTransitions.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
-
unregisterPopEntry(
PopEntry< Object?> popEntry) → void -
Unregisters a PopEntry in the route's widget subtree.
inherited
-
willPop(
) → Future< RoutePopDisposition> -
Returns RoutePopDisposition.doNotPop if any of callbacks added with
addScopedWillPopCallback returns either false or null. If they all
return true, the base Route.willPop's result will be returned. The
callbacks will be called in the order they were added, and will only be
called if all previous callbacks returned true.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited