import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; Future confirmationDialog(BuildContext context, String title, String text, {String acceptText, String rejectText, Function onAccept, Function onReject}) async { if (acceptText == null || acceptText.isEmpty) { acceptText = I18N.of(context).ok; } if (rejectText == null || rejectText.isEmpty) { rejectText = I18N.of(context).cancel; } AlertDialog dialog = AlertDialog( title: ListTile( title: Text(title), leading: FaIcon(FontAwesomeIcons.questionCircle), ), content: Text(text), actions: [ FlatButton( child: Text(rejectText), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); if (onReject != null) { onReject(); } } ), FlatButton( child: Text(acceptText), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); if (onAccept != null) { onAccept(); } } ) ], ); showDialog( context: context, builder: (BuildContext context) { return dialog; } ); } void showMessage(BuildContext context, String message) { Scaffold.of(context).showSnackBar(SnackBar( content: Text(message), )); } Future showInfoDialog(BuildContext context, String title, String description, {IconData icon = FontAwesomeIcons.info, String info, Function onDismissed}) async { if (info == null || info.isEmpty) { info = I18N.of(context).info; } showDialog( context: context, child: SimpleDialog( title: ListTile( title: Text(info), leading: FaIcon(icon), ), children: [ ListTile( title: Text(title), subtitle: Text(description) ) ] ) ).then((value) { if (onDismissed != null) { onDismissed(); } }); } Future showErrorDialog(BuildContext context, String title, String description, {IconData icon = FontAwesomeIcons.exclamationCircle, String error, Function onDismissed}) async { if (error == null || error.isEmpty) { error = I18N.of(context).error; } showDialog( context: context, builder: (dialogContext) { return SimpleDialog( title: ListTile( title: Text(error), leading: FaIcon(icon), ), children: [ ListTile( title: Text(title), subtitle: Text(description) ) ] ); }).then((value) { if (onDismissed != null) { onDismissed(); } }); } Future showServerError(BuildContext context, String title, String description) async { if (title == null || title.isEmpty) { title = I18N.of(context).serverError; } await showErrorDialog( context, title, description, error: I18N.of(context).serverError, icon: FontAwesomeIcons.server ); } Future showStatusCodeError(BuildContext context, int status, {int expected = 200}) async { await showServerError( context, "Invalid Response Code", "Server responded with status code ${status}" ); } Future showTimeoutError(BuildContext context) async { await showServerError(context, I18N.of(context).timeout, I18N.of(context).noResponse); } void showProgressDialog(BuildContext context, String title, String description) { showDialog( context: context, barrierDismissible: false, child: SimpleDialog( title: Text(title), children: [ CircularProgressIndicator(), Text(description), ], ) ); } void hideProgressDialog(BuildContext context) { Navigator.pop(context); } void showFormDialog(BuildContext context, String title, {GlobalKey key, List fields, List actions, Function callback}) { // Undefined actions = OK + Cancel if (actions == null) { actions = [ FlatButton( child: Text(I18N.of(context).cancel), onPressed: () { // Close the form Navigator.pop(context); } ), FlatButton( child: Text(I18N.of(context).save), onPressed: () { if (key.currentState.validate()) { key.currentState.save(); // Close the dialog Navigator.pop(context); // Callback if (callback != null) { callback(); } } } ) ]; } showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text(title), actions: actions, content: Form( key: key, child: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: fields ) ) ) ); } ); }