import "package:flutter/material.dart"; import "package:font_awesome_flutter/font_awesome_flutter.dart"; import "package:inventree/helpers.dart"; import "package:one_context/one_context.dart"; import "package:inventree/l10.dart"; import "package:inventree/preferences.dart"; import "package:inventree/widget/snacks.dart"; Future confirmationDialog(String title, String text, {IconData icon = FontAwesomeIcons.questionCircle, String? acceptText, String? rejectText, Function? onAccept, Function? onReject}) async { String _accept = acceptText ?? L10().ok; String _reject = rejectText ?? L10().cancel; OneContext().showDialog( builder: (BuildContext context) { return AlertDialog( title: ListTile( title: Text(title), leading: FaIcon(icon), ), content: Text(text), actions: [ TextButton( child: Text(_reject), onPressed: () { // Close this dialog Navigator.pop(context); if (onReject != null) { onReject(); } } ), TextButton( child: Text(_accept), onPressed: () { // Close this dialog Navigator.pop(context); if (onAccept != null) { onAccept(); } }, ) ] ); } ); } Future showErrorDialog(String title, String description, {IconData icon = FontAwesomeIcons.exclamationCircle, String? error, Function? onDismissed}) async { String _error = error ?? L10().error; OneContext().showDialog( builder: (context) => SimpleDialog( title: ListTile( title: Text(_error), leading: FaIcon(icon), ), children: [ ListTile( title: Text(title), subtitle: Text(description), ) ], ) ).then((value) { if (onDismissed != null) { onDismissed(); } }); } /* * Display a message indicating the nature of a server / API error */ Future showServerError(String url, String title, String description) async { if (!OneContext.hasContext) { return; } // We ignore error messages for certain URLs if (url.contains("notifications")) { return; } if (title.isEmpty) { title = L10().serverError; } // Play a sound final bool tones = await InvenTreeSettingsManager().getValue(INV_SOUNDS_SERVER, true) as bool; if (tones) { playAudioFile("sounds/server_error.mp3"); } showSnackIcon( title, success: false, actionText: L10().details, onAction: () { showErrorDialog( title, description, error: L10().serverError, icon: FontAwesomeIcons.server ); } ); } /* * Displays an error indicating that the server returned an unexpected status code */ Future showStatusCodeError(String url, int status) async { String msg = L10().responseInvalid; String extra = "${L10().statusCode}: ${status}"; switch (status) { case 400: msg = L10().response400; break; case 401: msg = L10().response401; break; case 403: msg = L10().response403; break; case 404: msg = L10().response404; break; case 405: msg = L10().response405; break; case 429: msg = L10().response429; break; case 500: msg = L10().response500; break; case 501: msg = L10().response501; break; case 502: msg = L10().response502; break; case 503: msg = L10().response503; break; case 504: msg = L10().response504; break; case 505: msg = L10().response505; break; default: break; } showServerError( url, msg, extra, ); } /* * Displays a message indicating that the server timed out on a certain request */ Future showTimeoutError(String url) async { await showServerError(url, L10().timeout, L10().noResponse); }