A route that blocks interaction with previous routes.

ModalRoutes cover the entire Navigator. They are not necessarily opaque, however; for example, a pop-up menu uses a ModalRoute but only shows the menu in a small box overlapping the previous route.

Implemented by


ModalRoute({RouteSettings settings: const RouteSettings() })
Creates a route that blocks interaction with previous routes.


animation Animation<double>
The animation that drives the route's transition and the previous route's forward transition.
barrierColor Color
The color to use for the modal barrier. If this is null, the barrier will be transparent. [...]
barrierDismissible bool
Whether you can dismiss this route by tapping the modal barrier. [...]
canPop bool
Whether this route can be popped. [...]
focusScopeNode FocusScopeNode
The node this route will use for its root FocusScope widget.
hasScopedWillPopCallback bool
True if one or more WillPopCallback callbacks exist. [...]
@protected, read-only
maintainState bool
Whether the route should remain in memory when it is inactive. If this is true, then the route is maintained, so that any futures it is holding from the next route will properly resolve when the next route pops. If this is not necessary, this can be set to false to allow the framework to entirely discard the route's widget hierarchy when it is not visible.
offstage bool
Whether this route is currently offstage. [...]
read / write
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 routes pushed on top of this route.
settings RouteSettings
The settings for this route. [...]
subtreeContext BuildContext
The build context for the subtree containing the primary content of this route.
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. [...]
read-only, inherited
controller AnimationController
The animation controller that the route uses to drive the transitions. [...]
@protected, read-only, inherited
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.
read-only, inherited
debugLabel String
A short description of this route useful for debugging.
read-only, inherited
finishedWhenPopped bool
Controls whether didPop calls NavigatorState.finalizeRoute. [...]
read-only, inherited
hashCode int
The hash code for this object. [...]
read-only, inherited
isActive bool
Whether this route is on the navigator. [...]
read-only, inherited
isCurrent bool
Whether this route is the top-most route on the navigator. [...]
read-only, inherited
isFirst bool
Whether this route is the bottom-most route on the navigator. [...]
read-only, inherited
The navigator that the route is in, if any.
read-only, inherited
opaque bool
Whether the route obscures previous routes when the transition is complete. [...]
read-only, inherited
overlayEntries List<OverlayEntry>
The entries this route has placed in the overlay.
read-only, inherited
popped Future<T>
A future that completes when this route is popped off the navigator. [...]
read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
transitionDuration Duration
The duration the transition lasts.
read-only, inherited
willHandlePopInternally bool
Whether calling didPop would return false.
read-only, inherited


addScopedWillPopCallback(WillPopCallback callback) → void
Enables this route to veto attempts by the user to dismiss it. [...]
buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) Widget
Override this method to build the primary content of this route. [...]
buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) Widget
Override this method to wrap the child with one or more transition widgets that define how the route arrives on and leaves the screen. [...]
changedInternalState() → void
Called whenever the internal state of the route has changed. [...]
createOverlayEntries() Iterable<OverlayEntry>
Subclasses should override this getter to return the builders for the overlay.
didChangePrevious(Route route) → void
This route's previous route has changed to the given new route. This is called on a route whenever the previous route changes for any reason, so long as it is in the history, except for immediately after the route has been pushed (in which case didPush or didReplace will be called instead). previousRoute will be null if there's no previous route.
didPush() TickerFuture
dispose() → void
install(OverlayEntry insertionPoint) → void
removeScopedWillPopCallback(WillPopCallback callback) → void
Remove one of the callbacks run by willPop. [...]
setState(VoidCallback fn) → void
Schedule a call to buildTransitions. [...]
toString() String
willPop() Future<RoutePopDisposition>
Returns the value of the first callback added with addScopedWillPopCallback that returns false. If they all return true, returns the inherited method's result (see Route.willPop). [...]
addLocalHistoryEntry(LocalHistoryEntry entry) → void
Adds a local history entry to this route. [...]
canTransitionFrom(TransitionRoute previousRoute) bool
Whether this route can perform a transition from the given route. [...]
canTransitionTo(TransitionRoute nextRoute) bool
Whether this route can perform a transition to the given route. [...]
createAnimation() Animation<double>
Called to create the animation that exposes the current progress of the transition controlled by the animation controller created by createAnimationController().
createAnimationController() AnimationController
Called to create the animation controller that will drive the transitions to this route from the previous one, and back to the previous route from this one.
didChangeNext(Route nextRoute) → void
This route's next route has changed to the given new route. This is called on a route whenever the next route changes for any reason, except for cases when didPopNext would be called, so long as it is in the history. nextRoute will be null if there's no next route.
didComplete(T result) → void
The route was popped or is otherwise being removed somewhat gracefully. [...]
@mustCallSuper, @protected, 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. Returning false will prevent the default behavior of NavigatorState.pop. [...]
didPopNext(Route nextRoute) → void
The given route, which came after this one, has been popped off the navigator.
didReplace(Route oldRoute) → void
Called after install when the route replaced another in the navigator.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
removeLocalHistoryEntry(LocalHistoryEntry entry) → void
Remove a local history entry from this route. [...]


operator ==(other) bool
The equality operator. [...]

Static Methods

of(BuildContext context) ModalRoute
Returns the modal route most closely associated with the given context. [...]
withName(String name) RoutePredicate
Returns a predicate that's true if the route has the specified name and if popping the route will not yield the same route, i.e. if the route's willHandlePopInternally property is false. [...]