showPlatformAlertDialog<T> function

Future<T?> showPlatformAlertDialog<T>({
  1. required BuildContext context,
  2. PlatformDialogData? platformDialogData,
  3. MaterialDialogData? materialDialogData,
  4. PlatformDialogData? cupertinoDialogData,
  5. MaterialAlertDialogData? materialAlertDialogData,
  6. CupertinoAlertDialogData? cupertinoAlertDialogData,
  7. Widget? title,
  8. Widget? content,
  9. List<Widget>? actions,
  10. Key? key,
})

Shows a platform-adaptive alert dialog that renders Material AlertDialog on Android and CupertinoAlertDialog on iOS.

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

  • On Android: shows a Material Design AlertDialog
  • On iOS: shows a CupertinoAlertDialog

The alert dialog can be configured with platform-specific data through materialAlertDialogData and cupertinoAlertDialogData, or with common properties.

Example:

showPlatformAlertDialog(
  context: context,
  title: Text('Confirm'),
  content: Text('Are you sure you want to continue?'),
  actions: [
    PlatformDialogAction(
      child: Text('Cancel'),
      onPressed: () => Navigator.pop(context),
    ),
    PlatformDialogAction(
      child: Text('OK'),
      onPressed: () => Navigator.pop(context),
    ),
  ],
)

Implementation

Future<T?> showPlatformAlertDialog<T>({
  required BuildContext context,
  PlatformDialogData? platformDialogData,
  MaterialDialogData? materialDialogData,
  PlatformDialogData? cupertinoDialogData,
  MaterialAlertDialogData? materialAlertDialogData,
  CupertinoAlertDialogData? cupertinoAlertDialogData,
  Widget? title,
  Widget? content,
  List<Widget>? actions,
  Key? key,
}) => _showBasePlatformDialog<T>(
  context: context,
  materialBuilder: (context) => AlertDialog(
    key: materialAlertDialogData?.widgetKey ?? key,
    title: materialAlertDialogData?.title ?? title,
    content: materialAlertDialogData?.content ?? content,
    actions: materialAlertDialogData?.actions ?? actions,
    icon: materialAlertDialogData?.icon,
    iconPadding: materialAlertDialogData?.iconPadding,
    iconColor: materialAlertDialogData?.iconColor,
    titlePadding: materialAlertDialogData?.titlePadding,
    titleTextStyle: materialAlertDialogData?.titleTextStyle,
    contentPadding: materialAlertDialogData?.contentPadding,
    contentTextStyle: materialAlertDialogData?.contentTextStyle,
    actionsPadding: materialAlertDialogData?.actionsPadding,
    actionsAlignment: materialAlertDialogData?.actionsAlignment,
    actionsOverflowAlignment: materialAlertDialogData?.actionsOverflowAlignment,
    actionsOverflowDirection: materialAlertDialogData?.actionsOverflowDirection,
    actionsOverflowButtonSpacing: materialAlertDialogData?.actionsOverflowButtonSpacing,
    buttonPadding: materialAlertDialogData?.buttonPadding,
    backgroundColor: materialAlertDialogData?.backgroundColor,
    elevation: materialAlertDialogData?.elevation,
    shadowColor: materialAlertDialogData?.shadowColor,
    surfaceTintColor: materialAlertDialogData?.surfaceTintColor,
    semanticLabel: materialAlertDialogData?.semanticLabel,
    insetPadding: materialAlertDialogData?.insetPadding,
    clipBehavior: materialAlertDialogData?.clipBehavior,
    shape: materialAlertDialogData?.shape,
    alignment: materialAlertDialogData?.alignment,
    constraints: materialAlertDialogData?.constraints,
    scrollable: materialAlertDialogData?.scrollable ?? MaterialAlertDialogData.kDefaultScrollable,
  ),
  cupertinoBuilder: (context) => CupertinoAlertDialog(
    key: cupertinoAlertDialogData?.widgetKey ?? key,
    title: cupertinoAlertDialogData?.title ?? title,
    content: cupertinoAlertDialogData?.content ?? content,
    actions:
        cupertinoAlertDialogData?.actions ?? actions ?? CupertinoAlertDialogData.kDefaultActions,
    scrollController: cupertinoAlertDialogData?.scrollController,
    actionScrollController: cupertinoAlertDialogData?.actionScrollController,
    insetAnimationDuration:
        cupertinoAlertDialogData?.insetAnimationDuration ??
        CupertinoAlertDialogData.kDefaultInsetAnimationDuration,
    insetAnimationCurve:
        cupertinoAlertDialogData?.insetAnimationCurve ??
        CupertinoAlertDialogData.kDefaultInsetAnimationCurve,
  ),
  platformDialogData: platformDialogData,
  materialDialogData: materialDialogData,
  cupertinoDialogData: cupertinoDialogData,
);