showPlatformDialog<T> function

Future<T?> showPlatformDialog<T>({
  1. required BuildContext context,
  2. WidgetBuilder? builder,
  3. WidgetBuilder? materialBuilder,
  4. WidgetBuilder? cupertinoBuilder,
  5. PlatformDialogData? platformDialogData,
  6. MaterialDialogData? materialDialogData,
  7. PlatformDialogData? cupertinoDialogData,
  8. Key? materialKey,
  9. Color? materialBackgroundColor,
  10. Duration materialInsetAnimationDuration = _kMaterialInsetAnimationDuration,
  11. Curve materialInsetAnimationCurve = _kMaterialInsetAnimationCurve,
  12. SemanticsRole materialSemanticsRole = _kMaterialSemanticsRole,
  13. AlignmentGeometry? materialAlignment,
  14. ShapeBorder? materialShape,
  15. Clip? materialClipBehavior,
  16. BoxConstraints? materialConstraints,
  17. double? materialElevation,
  18. EdgeInsets? materialInsetPadding,
  19. Color? materialShadowColor,
  20. Color? materialSurfaceTintColor,
})

Shows a platform-adaptive dialog that renders Material dialogs on Android and Cupertino dialogs on iOS.

This function automatically selects the appropriate dialog implementation based on the target platform:

The dialog can be configured with platform-specific data through materialDialogData and cupertinoDialogData, or with common properties through platformDialogData.

For Material dialogs, the builder is wrapped in a Dialog widget unless materialDialogData.fullscreenDialog is true.

Example:

showPlatformDialog(
  context: context,
  builder: (context) => PlatformAlertDialog(
    title: Text('Confirm'),
    content: Text('Are you sure?'),
    actions: [
      PlatformDialogAction(
        child: Text('Cancel'),
        onPressed: () => Navigator.pop(context),
      ),
      PlatformDialogAction(
        child: Text('OK'),
        onPressed: () => Navigator.pop(context),
      ),
    ],
  ),
)

The following parameters only have an effect for Material dialogs when materialDialogData.fullscreenDialog is false:

  • materialAlignment: Alignment of the dialog
  • materialShape: Shape of the dialog
  • materialClipBehavior: Clip behavior of the dialog
  • materialConstraints: Size constraints of the dialog
  • materialElevation: Elevation of the dialog
  • materialInsetPadding: Padding around the dialog
  • materialShadowColor: Shadow color of the dialog
  • materialSurfaceTintColor: Surface tint color of the dialog

Implementation

Future<T?> showPlatformDialog<T>({
  required BuildContext context,
  WidgetBuilder? builder,
  WidgetBuilder? materialBuilder,
  WidgetBuilder? cupertinoBuilder,
  PlatformDialogData? platformDialogData,
  MaterialDialogData? materialDialogData,
  PlatformDialogData? cupertinoDialogData,
  Key? materialKey,
  Color? materialBackgroundColor,
  Duration materialInsetAnimationDuration = _kMaterialInsetAnimationDuration,
  Curve materialInsetAnimationCurve = _kMaterialInsetAnimationCurve,
  SemanticsRole materialSemanticsRole = _kMaterialSemanticsRole,
  AlignmentGeometry? materialAlignment,
  ShapeBorder? materialShape,
  Clip? materialClipBehavior,
  BoxConstraints? materialConstraints,
  double? materialElevation,
  EdgeInsets? materialInsetPadding,
  Color? materialShadowColor,
  Color? materialSurfaceTintColor,
}) {
  assert(
    (builder == null) ^ (materialBuilder == null),
    'Either provide a builder or a materialBuilder.',
  );
  assert(
    (builder == null) ^ (cupertinoBuilder == null),
    'Either provide a builder or a cupertinoBuilder.',
  );
  final resolvedMaterialBuilder = materialBuilder ?? builder!;
  final resolvedCupertinoBuilder = cupertinoBuilder ?? builder!;

  return _showBasePlatformDialog<T>(
    context: context,
    materialBuilder: (context) =>
        (materialDialogData?.fullscreenDialog ?? MaterialDialogData.kDefaultFullscreenDialog)
        ? Dialog.fullscreen(
            key: materialKey,
            backgroundColor: materialBackgroundColor,
            insetAnimationDuration: materialInsetAnimationDuration,
            insetAnimationCurve: materialInsetAnimationCurve,
            semanticsRole: materialSemanticsRole,
            child: resolvedMaterialBuilder(context),
          )
        : Dialog(
            key: materialKey,
            backgroundColor: materialBackgroundColor,
            insetAnimationDuration: materialInsetAnimationDuration,
            insetAnimationCurve: materialInsetAnimationCurve,
            semanticsRole: materialSemanticsRole,
            alignment: materialAlignment,
            shape: materialShape,
            clipBehavior: materialClipBehavior,
            constraints: materialConstraints,
            elevation: materialElevation,
            insetPadding: materialInsetPadding,
            shadowColor: materialShadowColor,
            surfaceTintColor: materialSurfaceTintColor,
            child: resolvedMaterialBuilder(context),
          ),
    cupertinoBuilder: resolvedCupertinoBuilder,
    platformDialogData: platformDialogData,
    materialDialogData: materialDialogData,
    cupertinoDialogData: cupertinoDialogData,
  );
}