import 'package:flutter/material.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'dart:io' if (dart.library.html) 'dart:html' as io; class ErrorHandler { /// Zeigt eine benutzerfreundliche Fehlermeldung static void showError(BuildContext context, dynamic error) { String message = 'Ein Fehler ist aufgetreten'; final errorString = error.toString().toLowerCase(); // Web-kompatible Fehlerbehandlung (ohne direkte Typ-Prüfungen für dart:io) if (error is String) { message = error; } else if (errorString.contains('failed host lookup') || errorString.contains('socketexception') || errorString.contains('network') || errorString.contains('connection')) { message = 'Keine Internetverbindung. Bitte prüfe deine Verbindung.'; } else if (errorString.contains('timeout') || errorString.contains('timed out')) { message = 'Zeitüberschreitung. Bitte versuche es erneut.'; } else if (error is FormatException) { message = 'Datenfehler. Bitte versuche es erneut.'; } else if (errorString.contains('404') || errorString.contains('not found')) { message = 'Nicht gefunden.'; } else if (errorString.contains('401') || errorString.contains('403') || errorString.contains('unauthorized') || errorString.contains('forbidden')) { message = 'Nicht autorisiert. Bitte melde dich an.'; } else if (errorString.contains('500') || errorString.contains('server error') || errorString.contains('internal server')) { message = 'Server-Fehler. Bitte versuche es später erneut.'; } ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(message), backgroundColor: Colors.red, action: SnackBarAction( label: 'OK', textColor: Colors.white, onPressed: () {}, ), ), ); } /// Prüft die Internetverbindung static Future checkConnectivity() async { try { final connectivityResult = await Connectivity().checkConnectivity(); return connectivityResult != ConnectivityResult.none; } catch (e) { return false; } } /// Zeigt einen Retry-Dialog static Future showRetryDialog(BuildContext context, String message) async { return await showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Fehler'), content: Text(message), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(false), child: const Text('Abbrechen'), ), ElevatedButton( onPressed: () => Navigator.of(context).pop(true), child: const Text('Erneut versuchen'), ), ], ), ) ?? false; } }