import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import './platform_widget.dart'; class PlatformAlertDialog extends PlatformWidget { PlatformAlertDialog({@required this.title, @required this.content, @required this.defaultActionText, this.cancelActionText}) : assert(title != null), assert(content != null), assert(defaultActionText != null); final String title; final String content; final String defaultActionText; final String cancelActionText; Future show(BuildContext context) async { return Platform.isIOS ? await showCupertinoDialog( context: context, builder: (BuildContext context) => this, ) : await showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) => this, ); } @override Widget buildCupertinoWidget(BuildContext context) { return CupertinoAlertDialog( title: Text(title), content: Text(content), actions: _buildActions(context), ); } @override Widget buildMaterialWidget(BuildContext context) { return AlertDialog( title: Text(title), content: Text(content), actions: _buildActions(context), ); } List _buildActions(BuildContext context) { final actions = []; if (cancelActionText != null) { actions.add( PlatformAlertDialogAction( child: Text(cancelActionText), onPressed: () { Navigator.of(context).pop(false); }, ), ); } actions.add( PlatformAlertDialogAction( child: Text(defaultActionText), onPressed: () { Navigator.of(context).pop(true); }, ), ); return actions; } } class PlatformAlertDialogAction extends PlatformWidget { PlatformAlertDialogAction({ this.child, this.onPressed, }); final Widget child; final VoidCallback onPressed; @override Widget buildCupertinoWidget(BuildContext context) { return CupertinoDialogAction( child: child, onPressed: onPressed, ); } @override Widget buildMaterialWidget(BuildContext context) { return FlatButton( child: child, onPressed: onPressed, ); } }