showModal<T> function
- required BuildContext context,
- ModalConfiguration configuration = const FadeScaleTransitionConfiguration(),
- required WidgetBuilder builder,
- RouteSettings? routeSettings,
- ImageFilter? filter,
Displays a modal above the current contents of the app.
Content below the modal is dimmed with a ModalBarrier.
The context
argument is used to look up the Navigator for the
modal. It is only used when the method is called. Its corresponding widget
can be safely removed from the tree before the modal is closed.
The configuration
argument is used to determine characteristics of the
modal route that will be displayed, such as the enter and exit
transitions, the duration of the transitions, and modal barrier
properties. By default, configuration
is
FadeScaleTransitionConfiguration.
The useRootNavigator
argument is used to determine whether to push the
modal to the Navigator furthest from or nearest to the given context
.
By default, useRootNavigator
is true
and the modal route created by
this method is pushed to the root navigator. If the application has
multiple Navigator objects, it may be necessary to call
Navigator.of(context, rootNavigator: true).pop(result)
to close the
modal rather than just Navigator.pop(context, result)
.
Returns a Future that resolves to the value (if any) that was passed to Navigator.pop when the modal was closed.
See also:
- ModalConfiguration, which is the configuration object used to define the modal's characteristics.
Implementation
Future<T?> showModal<T>({
required BuildContext context,
ModalConfiguration configuration = const FadeScaleTransitionConfiguration(),
bool useRootNavigator = true,
required WidgetBuilder builder,
RouteSettings? routeSettings,
ui.ImageFilter? filter,
}) {
String? barrierLabel = configuration.barrierLabel;
// Avoid looking up [MaterialLocalizations.of(context).modalBarrierDismissLabel]
// if there is no dismissible barrier.
if (configuration.barrierDismissible && configuration.barrierLabel == null) {
barrierLabel = MaterialLocalizations.of(context).modalBarrierDismissLabel;
}
assert(!configuration.barrierDismissible || barrierLabel != null);
return Navigator.of(context, rootNavigator: useRootNavigator).push<T>(
_ModalRoute<T>(
barrierColor: configuration.barrierColor,
barrierDismissible: configuration.barrierDismissible,
barrierLabel: barrierLabel,
transitionBuilder: configuration.transitionBuilder,
transitionDuration: configuration.transitionDuration,
reverseTransitionDuration: configuration.reverseTransitionDuration,
builder: builder,
routeSettings: routeSettings,
filter: filter,
),
);
}