showNativeDialog<T> function

Future<T?> showNativeDialog<T>(
  1. BuildContext context, {
  2. required String title,
  3. required List<DialogAction<T>> actions,
  4. required String content,
})

A native dialog which shows a CupertinoAlertDialog on iOS and a AlertDialog on Android.

Example:

showNativeDialog(
  context,
  title: 'Title',
  content: 'Content',
  actions: [
    DialogAction(text: 'Action', onTap: () {}),
  ],
);

Implementation

Future<T?> showNativeDialog<T>(
  BuildContext context, {
  required String title,
  required List<DialogAction<T>> actions,
  required String content,
}) {
  if (defaultTargetPlatform == TargetPlatform.iOS) {
    return showCupertinoDialog<T>(
      context: context,
      builder: (dialogContext) => CupertinoAlertDialog(
        title: Text(title),
        content: Text(content),
        actions: actions
            .map(
              (action) => CupertinoDialogAction(
                onPressed: () async {
                  final result = await action.onTap();
                  if (dialogContext.mounted) Navigator.of(dialogContext).pop(result);
                },
                isDestructiveAction: action.isDestructiveAction,
                child: Text(action.text, style: action.textStyle),
              ),
            )
            .toList(),
      ),
    );
  } else {
    return showDialog<T?>(
      context: context,
      builder: (dialogContext) => AlertDialog(
        title: Text(title),
        content: Text(content),
        actions: actions
            .map(
              (action) => TextButton(
                onPressed: () async {
                  final result = await action.onTap();
                  if (dialogContext.mounted) Navigator.of(dialogContext).pop(result);
                },
                child: Text(action.text, style: action.textStyle),
              ),
            )
            .toList(),
      ),
    );
  }
}