import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:solian/exceptions/request.dart'; import 'package:solian/exceptions/unauthorized.dart'; extension SolianExtenions on BuildContext { void showSnackbar(String content, {SnackBarAction? action}) { ScaffoldMessenger.of(this).showSnackBar(SnackBar( content: Text(content), action: action, )); } void clearSnackbar() { ScaffoldMessenger.of(this).clearSnackBars(); } Future showModalDialog(String title, desc) { return showDialog( useRootNavigator: true, context: this, builder: (ctx) => AlertDialog( title: Text(title), content: Text(desc), actions: [ TextButton( onPressed: () => Navigator.pop(ctx), child: Text('okay'.tr), ) ], ), ); } Future showInfoDialog(String title, body) { return showDialog( useRootNavigator: true, context: this, builder: (ctx) => AlertDialog( title: Text(title), content: Text(body), actions: [ TextButton( onPressed: () => Navigator.pop(ctx), child: Text('okay'.tr), ) ], ), ); } Future showErrorDialog(dynamic exception) { Widget content = Text(exception.toString().capitalize!); if (exception is UnauthorizedException) { content = Text('errorHappenedUnauthorized'.tr); } if (exception is RequestException) { String overall; switch (exception.data.statusCode) { case 400: overall = 'errorHappenedRequestBad'.tr; break; case 401: overall = 'errorHappenedUnauthorized'.tr; break; case 403: overall = 'errorHappenedRequestForbidden'.tr; break; case 404: overall = 'errorHappenedRequestNotFound'.tr; break; case null: overall = 'errorHappenedRequestConnection'.tr; break; default: overall = 'errorHappenedRequestUnknown'.tr; break; } if (exception.data.statusCode != null) { content = Text( '$overall\n\n(${exception.data.statusCode}) ${exception.data.bodyString}', ); } else { content = Text(overall); } } return showDialog( useRootNavigator: true, context: this, builder: (ctx) => AlertDialog( title: Text('errorHappened'.tr), content: content, actions: [ TextButton( onPressed: () => Navigator.pop(ctx), child: Text('okay'.tr), ) ], ), ); } }