DialogRoute<T> constructor

DialogRoute<T>({
  1. required BuildContext context,
  2. required WidgetBuilder builder,
  3. CapturedThemes? themes,
  4. Color? barrierColor = const Color.fromRGBO(0, 0, 0, 0),
  5. bool barrierDismissible = true,
  6. String? barrierLabel,
  7. bool useSafeArea = true,
  8. RouteSettings? settings,
  9. Offset? anchorPoint,
  10. TraversalEdgeBehavior? traversalEdgeBehavior,
  11. required AlignmentGeometry alignment,
  12. required RouteTransitionsBuilder? transitionBuilder,
  13. bool fullScreen = false,
  14. CapturedData? data,
})

Creates a DialogRoute.

Parameters:

  • context (BuildContext, required): Build context.
  • builder (WidgetBuilder, required): Dialog content builder.
  • themes (CapturedThemes?, optional): Captured theme data.
  • barrierColor (Color, default: transparent): Barrier color.
  • barrierDismissible (bool?, optional): Whether tapping barrier dismisses dialog.
  • barrierLabel (String?, optional): Semantic label for barrier.
  • useSafeArea (bool, default: true): Whether to respect safe area.
  • settings (RouteSettings?, optional): Route settings.
  • anchorPoint (Offset?, optional): Anchor point for route.
  • traversalEdgeBehavior (TraversalEdgeBehavior?, optional): Traversal behavior.
  • alignment (AlignmentGeometry, required): Dialog alignment.
  • transitionBuilder (RouteTransitionsBuilder, required): Transition builder.
  • fullScreen (bool, default: false): Full-screen mode.
  • data (CapturedData?, optional): Captured data.

Implementation

DialogRoute({
  required BuildContext context,
  required WidgetBuilder builder,
  CapturedThemes? themes,
  super.barrierColor = const Color.fromRGBO(0, 0, 0, 0),
  super.barrierDismissible,
  String? barrierLabel,
  bool useSafeArea = true,
  super.settings,
  super.anchorPoint,
  super.traversalEdgeBehavior,
  required this.alignment,
  required super.transitionBuilder,
  this.fullScreen = false,
  this.data,
}) : super(
        pageBuilder: (BuildContext buildContext, Animation<double> animation,
            Animation<double> secondaryAnimation) {
          final Widget pageChild = Builder(
            builder: (context) {
              final theme = Theme.of(context);
              final scaling = theme.scaling;
              final densityContainerPadding =
                  theme.density.baseContainerPadding * scaling;
              return Padding(
                padding: fullScreen
                    ? EdgeInsets.zero
                    : EdgeInsets.all(densityContainerPadding),
                child: builder(context),
              );
            },
          );
          Widget dialog = themes?.wrap(pageChild) ?? pageChild;
          if (data != null) {
            dialog = data.wrap(dialog);
          }
          if (useSafeArea) {
            dialog = SafeArea(child: dialog);
          }
          return dialog;
        },
        barrierLabel: barrierLabel ?? 'Dismiss',
        transitionDuration: const Duration(milliseconds: 150),
      );