showMoonModal<T> function

Future<T?> showMoonModal<T>({
  1. bool barrierDismissible = true,
  2. bool useRootNavigator = true,
  3. bool useSafeArea = true,
  4. Color? barrierColor,
  5. Curve? transitionCurve,
  6. Duration? transitionDuration,
  7. Offset? anchorPoint,
  8. RouteSettings? routeSettings,
  9. String? barrierLabel = "Dismiss",
  10. required BuildContext context,
  11. required WidgetBuilder builder,
})

Displays a modal overlay over the app's current content, incorporating entrance and exit animations, modal barrier color, and modal barrier behavior, enabling dialog dismissal via barrier taps. Intended for use in conjunction with MoonModal.

Implementation

Future<T?> showMoonModal<T>({
  bool barrierDismissible = true,
  bool useRootNavigator = true,
  bool useSafeArea = true,
  Color? barrierColor,
  Curve? transitionCurve,
  Duration? transitionDuration,
  Offset? anchorPoint,
  RouteSettings? routeSettings,
  String? barrierLabel = "Dismiss",
  required BuildContext context,
  required WidgetBuilder builder,
}) {
  assert(!barrierDismissible || barrierLabel != null);
  assert(_debugIsActive(context));

  final CapturedThemes themes = InheritedTheme.capture(
    from: context,
    to: Navigator.of(context, rootNavigator: useRootNavigator).context,
  );

  final Color effectiveBarrierColor =
      barrierColor ?? context.moonTheme?.modalTheme.colors.barrierColor ?? MoonColors.light.zeno;

  final Duration effectiveTransitionDuration = transitionDuration ??
      context.moonTheme?.modalTheme.properties.transitionDuration ??
      MoonTransitions.transitions.defaultTransitionDuration;

  final Curve effectiveTransitionCurve = transitionCurve ??
      context.moonTheme?.modalTheme.properties.transitionCurve ??
      MoonTransitions.transitions.defaultTransitionCurve;

  return Navigator.of(context, rootNavigator: useRootNavigator).push<T>(
    MoonModalRoute<T>(
      context: context,
      builder: builder,
      barrierDismissible: barrierDismissible,
      barrierLabel: barrierLabel,
      barrierColor: effectiveBarrierColor,
      transitionDuration: effectiveTransitionDuration,
      transitionCurve: effectiveTransitionCurve,
      useSafeArea: useSafeArea,
      settings: routeSettings,
      anchorPoint: anchorPoint,
      themes: themes,
    ),
  );
}