TextEditingController werden in build() erzeugt (Leaks, Cursor-Spruenge) #7

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

An mehreren Stellen wird ein TextEditingController direkt in build() bzw. in einer aus build() aufgerufenen Methode angelegt:

  • ModernWeekField.build - app/lib/widgets/modern_week_field.dart:55
  • ModernDateField.build - app/lib/widgets/modern_date_field.dart:45
  • _buildIngredientItem - app/lib/screens/recipe_edit_screen.dart:453-455
  • _buildInstructionItem - app/lib/screens/recipe_edit_screen.dart:544

Folgen: bei jedem Rebuild entsteht ein neuer Controller, der alte wird nie disposed. Cursorposition und Selektion springen an den Anfang, der Fokus kann verloren gehen, sobald irgendein setState ausgeloest wird - im Rezept-Editor also beim Hinzufuegen einer Zutat, beim Aendern der Schwierigkeit oder beim Setzen eines Tags.

Vorschlag:

  • ModernWeekField / ModernDateField auf StatefulWidget umstellen oder ganz ohne Controller ueber InputDecorator rendern
  • In recipe_edit_screen Controller-Listen im State halten (parallel zu _ingredients / _instructions), in dispose() aufraeumen und den Listenelementen ValueKey geben
An mehreren Stellen wird ein `TextEditingController` direkt in `build()` bzw. in einer aus `build()` aufgerufenen Methode angelegt: - `ModernWeekField.build` - `app/lib/widgets/modern_week_field.dart:55` - `ModernDateField.build` - `app/lib/widgets/modern_date_field.dart:45` - `_buildIngredientItem` - `app/lib/screens/recipe_edit_screen.dart:453-455` - `_buildInstructionItem` - `app/lib/screens/recipe_edit_screen.dart:544` Folgen: bei jedem Rebuild entsteht ein neuer Controller, der alte wird nie disposed. Cursorposition und Selektion springen an den Anfang, der Fokus kann verloren gehen, sobald irgendein `setState` ausgeloest wird - im Rezept-Editor also beim Hinzufuegen einer Zutat, beim Aendern der Schwierigkeit oder beim Setzen eines Tags. **Vorschlag:** - `ModernWeekField` / `ModernDateField` auf `StatefulWidget` umstellen oder ganz ohne Controller ueber `InputDecorator` rendern - In `recipe_edit_screen` Controller-Listen im State halten (parallel zu `_ingredients` / `_instructions`), in `dispose()` aufraeumen und den Listenelementen `ValueKey` geben
Author
Owner

Behoben auf Branch frontend-improvements.

ModernWeekField und ModernDateField sind StatefulWidgets; die Controller der Zutaten- und Schrittzeilen liegen im State, werden mit der Zeile entfernt und in dispose freigegeben.

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`. ModernWeekField und ModernDateField sind StatefulWidgets; die Controller der Zutaten- und Schrittzeilen liegen im State, werden mit der Zeile entfernt und in dispose freigegeben. <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#7
No description provided.