Initialer Commit: Projekt Start

This commit is contained in:
Tim Leikauf
2026-01-03 15:24:36 +01:00
commit 3773f94303
168 changed files with 228080 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
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<bool> checkConnectivity() async {
try {
final connectivityResult = await Connectivity().checkConnectivity();
return connectivityResult != ConnectivityResult.none;
} catch (e) {
return false;
}
}
/// Zeigt einen Retry-Dialog
static Future<bool> showRetryDialog(BuildContext context, String message) async {
return await showDialog<bool>(
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;
}
}