showMenu function
Route
showMenu(
- BuildContext context,
- BuildContext? alignmentContext,
- Color? barrierColor,
- Route? route,
Shows the menu
at the menuPosition
.
alignmentContext
is a local space where positioning occurs.
The menu may be outside this space depending on menuPosition
value.
A barrier is built only for the centered menu.
An existing menu can be updated by providing its route
.
Returns the route of a shown menu. The route's Route.popped future completes when the menu is dismissed.
Implementation
Route showMenu(
BuildContext context,
Widget menu, {
Axis? menuAxis,
Position? menuPosition,
BuildContext? alignmentContext,
MenuStyle? menuStyle,
MenuManagerController? menuManagerController,
Color? barrierColor,
Route? route
}) {
menuPosition ??= const Position.centered();
barrierColor ??= Theme.of(context).brightness == Brightness.light ?
Colors.black54 : Colors.black.withOpacity(0.75);
Widget menuOverlay = MenuManager(
menuAxis: menuAxis,
menuStyle: menuStyle,
targetContext: context,
menu: menu,
closeCallback: () {
(route as MenuRoute).removeAndComplete(context);
},
menuPosition: menuPosition,
alignmentContext: alignmentContext,
menuManagerController: menuManagerController,
);
if (menuPosition.isCentered && alignmentContext == null) {
menuOverlay = ColoredBox(
color: barrierColor,
child: menuOverlay
);
}
if (route == null) {
route = MenuRoute(menuOverlay);
Navigator.push(context, route);
return route;
}
final overlayRoute = route as OverlayRouteBuilder;
overlayRoute.widget = menuOverlay;
if (!overlayRoute.isActive)
Navigator.push(context, route);
return route;
}