Rohe Server-Antworten landen als Fehlermeldung im UI #17

Closed
opened 2026-09-09 20:12:46 +00:00 by Aceless · 1 comment
Owner
throw ApiException(statusCode: response.statusCode, message: response.body);

ApiException.toString() gibt Statuscode plus kompletten Response-Body zurueck. Dieser String wird an mehreren Stellen ungefiltert angezeigt:

  • login_screen.dart:64 - Text(ref.read(authProvider).error ?? 'Login failed')
  • register_screen.dart:36
  • recipe_edit_screen.dart:714 - 'Import fehlgeschlagen: $e'
  • settings_screen.dart:428
  • shared_link_import_handler.dart:70

Der Nutzer sieht dann z.B. ApiException(statusCode: 400, message: {"errors":{"Password":["..."]}}) oder eine komplette HTML-Fehlerseite. Bei 500ern koennen Interna des Backends durchschlagen.

Vorschlag: In _handleResponse das Fehler-JSON parsen und eine lesbare Nachricht extrahieren, sonst auf statuscode-abhaengige Standardtexte zurueckfallen ("Falsche E-Mail oder Passwort", "Server nicht erreichbar", ...). Den Rohtext nur per debugPrint loggen.

Datei: app/lib/services/api_client.dart:76-101

```dart throw ApiException(statusCode: response.statusCode, message: response.body); ``` `ApiException.toString()` gibt Statuscode plus kompletten Response-Body zurueck. Dieser String wird an mehreren Stellen ungefiltert angezeigt: - `login_screen.dart:64` - `Text(ref.read(authProvider).error ?? 'Login failed')` - `register_screen.dart:36` - `recipe_edit_screen.dart:714` - `'Import fehlgeschlagen: $e'` - `settings_screen.dart:428` - `shared_link_import_handler.dart:70` Der Nutzer sieht dann z.B. `ApiException(statusCode: 400, message: {"errors":{"Password":["..."]}})` oder eine komplette HTML-Fehlerseite. Bei 500ern koennen Interna des Backends durchschlagen. **Vorschlag:** In `_handleResponse` das Fehler-JSON parsen und eine lesbare Nachricht extrahieren, sonst auf statuscode-abhaengige Standardtexte zurueckfallen ("Falsche E-Mail oder Passwort", "Server nicht erreichbar", ...). Den Rohtext nur per `debugPrint` loggen. Datei: `app/lib/services/api_client.dart:76-101`
Author
Owner

Behoben auf Branch frontend-improvements.

_handleResponse extrahiert Meldungen aus ProblemDetails und faellt sonst auf statuscode-abhaengige Texte zurueck. Der rohe Body geht nur noch ins debugPrint.

Commits
  • 47edeeb Added Claude
  • 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung
  • 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests
  • bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten
  • d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben
  • d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren
  • 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen

flutter analyze: 0 Issues. flutter test: 22 Tests gruen.

Behoben auf Branch `frontend-improvements`. _handleResponse extrahiert Meldungen aus ProblemDetails und faellt sonst auf statuscode-abhaengige Texte zurueck. Der rohe Body geht nur noch ins debugPrint. <details><summary>Commits</summary> - 47edeeb Added Claude - 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung - 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests - bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten - d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben - d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren - 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen </details> `flutter analyze`: 0 Issues. `flutter test`: 22 Tests gruen.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Aceless/RecipePlanner#17
No description provided.