dialog<T> static method

Future<T?> dialog<T>(
  1. Widget widget, {
  2. bool barrierDismissible = true,
  3. Color? barrierColor,
  4. bool useSafeArea = true,
  5. Object? arguments,
  6. Duration? transitionDuration,
  7. Curve? transitionCurve,
  8. String? name,
})

Show a dialog

Implementation

static Future<T?> dialog<T>(
  Widget widget, {
  bool barrierDismissible = true,
  Color? barrierColor,
  bool useSafeArea = true,
  Object? arguments,
  Duration? transitionDuration,
  Curve? transitionCurve,
  String? name,
}) async {
  assert(debugCheckHasMaterialLocalizations(navigator!.context));

  final theme = Theme.of(navigator!.context);
  return navigator?.push<T>(
    FlowDialogRoute<T>(
      pageBuilder: (buildContext, animation, secondaryAnimation) {
        final pageChild = widget;
        Widget dialog = Builder(builder: (context) {
          return Theme(data: theme, child: pageChild);
        });
        if (useSafeArea) {
          dialog = SafeArea(child: dialog);
        }
        // Center the dialog with max width constraint
        return Center(
          child: ConstrainedBox(
            constraints: const BoxConstraints(maxWidth: 400),
            child: dialog,
          ),
        );
      },
      barrierDismissible: barrierDismissible,
      barrierLabel: MaterialLocalizations.of(navigator!.context).modalBarrierDismissLabel,
      barrierColor: barrierColor ?? Colors.black54,
      transitionDuration: transitionDuration ?? const Duration(milliseconds: 200),
      transitionBuilder: (context, animation, secondaryAnimation, child) {
        return FadeTransition(
          opacity: CurvedAnimation(
            parent: animation,
            curve: transitionCurve ?? Curves.easeOut,
          ),
          child: child,
        );
      },
      settings: RouteSettings(arguments: arguments, name: name),
    ),
  ).whenComplete(() {
    _isDialogOpen = false;
  }).then((value) {
    return value;
  });
}