RecipeSuggestionScreen: Absturz bei leerem Titel, keine Fehlerbehandlung, ungenutzte Filter #24

Closed
opened 2026-09-09 20:12:48 +00:00 by Aceless · 1 comment
Owner

Vier Punkte in recipe_suggestion_screen.dart:

1. Absturz bei leerem Titel (Zeile 109):

recipe.title[0].toUpperCase()

Recipe.fromJson faellt bei fehlendem Titel auf '' zurueck. Ein Rezept ohne Titel wirft hier RangeError. Besser: recipe.title.isEmpty ? '?' : recipe.title[0].

2. Kein catch (Zeile 33-53):

try {
  final suggestions = await recipeNotifier.getSuggestedRecipes(...);
  setState(() { _suggestedRecipes = suggestions; });   // zudem ohne mounted-Check
} finally {
  if (mounted) setState(() { _isLoading = false; });
}

Bei Netzwerkfehler fliegt die Exception unbehandelt raus, der Nutzer sieht nur "Keine Vorschlaege verfuegbar".

3. Filter des Providers ungenutzt (Zeile 40-42): getSuggestedRecipes unterstuetzt maxPreparationTime, maxDifficulty und excludeTags. Der Screen uebergibt nur mealType und bietet keine UI dafuer. Fuer einen Screen namens "Rezeptvorschlaege" ist das die eigentliche Funktion.

4. Fire-and-forget beim Hinzufuegen (Zeile 154-172): addMealToPlan wird nicht awaited, direkt danach kommen SnackBar und pop(). Schlaegt der Request fehl, meldet die App trotzdem Erfolg. Der "Rueckgaengig"-Button entfernt dann eine Mahlzeit, die nie angelegt wurde.

Vier Punkte in `recipe_suggestion_screen.dart`: **1. Absturz bei leerem Titel** (Zeile 109): ```dart recipe.title[0].toUpperCase() ``` `Recipe.fromJson` faellt bei fehlendem Titel auf `''` zurueck. Ein Rezept ohne Titel wirft hier `RangeError`. Besser: `recipe.title.isEmpty ? '?' : recipe.title[0]`. **2. Kein `catch`** (Zeile 33-53): ```dart try { final suggestions = await recipeNotifier.getSuggestedRecipes(...); setState(() { _suggestedRecipes = suggestions; }); // zudem ohne mounted-Check } finally { if (mounted) setState(() { _isLoading = false; }); } ``` Bei Netzwerkfehler fliegt die Exception unbehandelt raus, der Nutzer sieht nur "Keine Vorschlaege verfuegbar". **3. Filter des Providers ungenutzt** (Zeile 40-42): `getSuggestedRecipes` unterstuetzt `maxPreparationTime`, `maxDifficulty` und `excludeTags`. Der Screen uebergibt nur `mealType` und bietet keine UI dafuer. Fuer einen Screen namens "Rezeptvorschlaege" ist das die eigentliche Funktion. **4. Fire-and-forget beim Hinzufuegen** (Zeile 154-172): `addMealToPlan` wird nicht awaited, direkt danach kommen SnackBar und `pop()`. Schlaegt der Request fehl, meldet die App trotzdem Erfolg. Der "Rueckgaengig"-Button entfernt dann eine Mahlzeit, die nie angelegt wurde.
Author
Owner

Behoben auf Branch frontend-improvements.

catch ergaenzt, mounted-Pruefung vor setState, recipe.title[0] abgesichert, addMealToPlan awaited. maxPreparationTime und maxDifficulty haben jetzt eine Filterleiste.

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`. catch ergaenzt, mounted-Pruefung vor setState, recipe.title[0] abgesichert, addMealToPlan awaited. maxPreparationTime und maxDifficulty haben jetzt eine Filterleiste. <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#24
No description provided.