Rezept-Editor: leere Zutat wird gespeichert, Tag-Feld leert sich nicht, kein Schutz vor Datenverlust #25

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

Leere Zutaten und Schritte werden gespeichert. _ensureMinimumFields() legt immer eine leere Ingredient('', '', '') und einen leeren Schritt an. Die Pruefung beim Speichern ist deshalb wirkungslos:

if (_ingredients.isEmpty) { ... }   // trifft nie zu

Ergebnis: Die mit * als Pflichtfeld markierten Zutaten sind faktisch optional, und leere Eintraege landen in der Datenbank und spaeter auf der Bring!-Einkaufsliste.
Vorschlag: Vor dem Speichern where((i) => i.name.trim().isNotEmpty) filtern und erst danach auf leer pruefen.

Tag-Feld leert sich nach dem Anlegen nicht (Zeile 610-621): Das TextField hat keinen Controller, onSubmitted fuegt den Tag hinzu, der Text bleibt aber stehen. Der Nutzer muss ihn haendisch loeschen, sonst legt er beim naechsten Enter denselben Tag erneut an.

Kein Schutz vor Datenverlust: Weder der Schliessen-Button im Sheet noch der Zurueck-Gestus fragen bei ungespeicherten Aenderungen nach. Ein langes Rezept ist mit einem Wisch weg. Vorschlag: PopScope mit onPopInvokedWithResult und Bestaetigungsdialog.

_updateIngredient und _instructions[index] = value mutieren State ohne setState (Zeile 136-148, 576). Aktuell unkritisch, weil kein Rebuild noetig ist, aber fragil - sobald etwas von den Werten abhaengt (z.B. der Loeschen-Button ab zwei Eintraegen), sieht man veraltete UI.

Datei: app/lib/screens/recipe_edit_screen.dart

**Leere Zutaten und Schritte werden gespeichert.** `_ensureMinimumFields()` legt immer eine leere `Ingredient('', '', '')` und einen leeren Schritt an. Die Pruefung beim Speichern ist deshalb wirkungslos: ```dart if (_ingredients.isEmpty) { ... } // trifft nie zu ``` Ergebnis: Die mit `*` als Pflichtfeld markierten Zutaten sind faktisch optional, und leere Eintraege landen in der Datenbank und spaeter auf der Bring!-Einkaufsliste. Vorschlag: Vor dem Speichern `where((i) => i.name.trim().isNotEmpty)` filtern und erst danach auf leer pruefen. **Tag-Feld leert sich nach dem Anlegen nicht** (Zeile 610-621): Das `TextField` hat keinen Controller, `onSubmitted` fuegt den Tag hinzu, der Text bleibt aber stehen. Der Nutzer muss ihn haendisch loeschen, sonst legt er beim naechsten Enter denselben Tag erneut an. **Kein Schutz vor Datenverlust:** Weder der Schliessen-Button im Sheet noch der Zurueck-Gestus fragen bei ungespeicherten Aenderungen nach. Ein langes Rezept ist mit einem Wisch weg. Vorschlag: `PopScope` mit `onPopInvokedWithResult` und Bestaetigungsdialog. **`_updateIngredient` und `_instructions[index] = value` mutieren State ohne `setState`** (Zeile 136-148, 576). Aktuell unkritisch, weil kein Rebuild noetig ist, aber fragil - sobald etwas von den Werten abhaengt (z.B. der Loeschen-Button ab zwei Eintraegen), sieht man veraltete UI. Datei: `app/lib/screens/recipe_edit_screen.dart`
Author
Owner

Behoben auf Branch frontend-improvements.

Leere Zutaten und Schritte werden vor dem Speichern verworfen, das Tag-Feld hat einen Controller und leert sich, PopScope fragt vor dem Verwerfen nach.

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`. Leere Zutaten und Schritte werden vor dem Speichern verworfen, das Tag-Feld hat einen Controller und leert sich, PopScope fragt vor dem Verwerfen nach. <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#25
No description provided.