Filter lassen sich nicht zuruecksetzen: copyWith mit ?? auf nullable Feldern #6

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

In RecipeState.copyWith:

filterMealType: filterMealType ?? this.filterMealType,
filterDifficulty: filterDifficulty ?? this.filterDifficulty,

null bedeutet hier "nicht aendern", nicht "loeschen". Damit sind mehrere Aufrufe wirkungslos:

  • clearFilters() setzt beide auf null -> alter Wert bleibt erhalten
  • setFilterMealType(null) beim Abwaehlen eines FilterChips -> Filter bleibt aktiv
  • _handleSpaceChange setzt beim Space-Wechsel filterMealType: null -> Filter des alten Space wandert mit

Reproduktion: Filter "Mittagessen" waehlen, denselben Chip erneut antippen. Der Chip wirkt abgewaehlt, die Liste bleibt gefiltert. Gleiches gilt fuer den Button "Filter zuruecksetzen".

Dasselbe Muster betrifft:

  • MealPlanState.copyWith - currentWeekPlan laesst sich nicht auf null setzen
  • SpacesState.copyWith - currentSpace laesst sich nicht auf null setzen

Vorschlag: Sentinel-Muster verwenden (Object? field = _sentinel) oder clearFilters ohne copyWith bauen.

Dateien: app/lib/providers/recipe_provider.dart:32-50,173-180, app/lib/providers/meal_plan_provider.dart:28-40, app/lib/providers/spaces_provider.dart:25-37

In `RecipeState.copyWith`: ```dart filterMealType: filterMealType ?? this.filterMealType, filterDifficulty: filterDifficulty ?? this.filterDifficulty, ``` `null` bedeutet hier "nicht aendern", nicht "loeschen". Damit sind mehrere Aufrufe wirkungslos: - `clearFilters()` setzt beide auf `null` -> alter Wert bleibt erhalten - `setFilterMealType(null)` beim Abwaehlen eines FilterChips -> Filter bleibt aktiv - `_handleSpaceChange` setzt beim Space-Wechsel `filterMealType: null` -> Filter des alten Space wandert mit **Reproduktion:** Filter "Mittagessen" waehlen, denselben Chip erneut antippen. Der Chip wirkt abgewaehlt, die Liste bleibt gefiltert. Gleiches gilt fuer den Button "Filter zuruecksetzen". Dasselbe Muster betrifft: - `MealPlanState.copyWith` - `currentWeekPlan` laesst sich nicht auf `null` setzen - `SpacesState.copyWith` - `currentSpace` laesst sich nicht auf `null` setzen **Vorschlag:** Sentinel-Muster verwenden (`Object? field = _sentinel`) oder `clearFilters` ohne `copyWith` bauen. Dateien: `app/lib/providers/recipe_provider.dart:32-50,173-180`, `app/lib/providers/meal_plan_provider.dart:28-40`, `app/lib/providers/spaces_provider.dart:25-37`
Author
Owner

Behoben auf Branch frontend-improvements.

copyWith nutzt jetzt den unset-Sentinel aus lib/util/copy_with.dart. Betrifft RecipeState, MealPlanState, SpacesState und AuthState. Durch Tests in test/copy_with_test.dart abgedeckt.

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`. copyWith nutzt jetzt den unset-Sentinel aus lib/util/copy_with.dart. Betrifft RecipeState, MealPlanState, SpacesState und AuthState. Durch Tests in test/copy_with_test.dart abgedeckt. <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#6
No description provided.