2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +00:00
inventree-app/lib/widget/dialogs.dart
Oliver Walters dbc024491c Pass URL through to the showServeError method
- Can decide, based on the URL, if we want to show an error
2022-06-03 20:23:59 +10:00

181 lines
4.0 KiB
Dart

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<void> 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<void> 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<void> 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<void> 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<void> showTimeoutError(String url) async {
await showServerError(url, L10().timeout, L10().noResponse);
}