소스 검색

TASKS/CLAUDE: P2-1-stand + twee builder-lessen (App State-knop werkt wel, Value Key hoort op de instantie)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 3 시간 전
부모
커밋
995bc27778
2개의 변경된 파일62개의 추가작업 그리고 1개의 파일을 삭제
  1. 17 0
      CLAUDE.md
  2. 45 1
      TASKS.md

+ 17 - 0
CLAUDE.md

@@ -3135,6 +3135,23 @@ patroon dat al elders in dit project draait
 (`MasonryGridView.builder`/`StaggeredView` op
 `HorecagelegenhedenOverzicht`).
 
+**✅ ACHTERHAALD per 2026-09-15: "+ Add App State Variable" werkt gewoon.** Eén
+klik op de knop rechtsboven opent een echte dialoog *"Add App State"* met Field
+Name, Description, Field Type, *Is List* en *Persisted*, plus Cancel/Create.
+Veld aangemaakt (`datumFilter`, String, niet persisted) en meteen terug te zien
+in `app_state.dart`. Reken wel op een trage builder: het App Values-paneel deed
+er ~60 s over om te laden. Het verhaal hieronder is bewaard voor het geval het
+terugkomt, maar probeer het gewoon.
+
+**De Value Key van een lijstwidget hoort op de COMPONENT-INSTANTIE, niet op de
+widget binnen het component.** Uitgezocht 2026-09-15 bij het datumfilter
+(P2-1). Een `PagedMasonryGridView` haalt zijn `pagingController` uit `_model`
+van het component. Verander je een key *binnen* dat component, dan blijft
+hetzelfde model bestaan en dus ook de al geladen pagina's — je filter verandert
+de query wel, maar je ziet de oude lijst. Een Value Key op de instantie (op de
+pagina) vervangt het hele component inclusief model, en dan begint de
+paginering netjes opnieuw.
+
 **"+ Add App State Variable"/"+ Add App Constant"-knop reageert niet
 op Claude's klikken (2026-08-09).** Op zowel `?tab=appValues&appValuesTab=state`
 als `...=constant` (bereikbaar via ⌘+K → typ een bestaande App

+ 45 - 1
TASKS.md

@@ -198,7 +198,51 @@ tonen; alternatief is default "Amsterdam", te wisselen in dezelfde binding).
 Verifiëren op telefoonformaat (393 dp): hamburger + terugknop + logo + naam
 moeten op één regel passen, ook bij "'s-Hertogenbosch".
 
-**P2-1 · Datumfilter Vandaag / Dit weekend / Deze week · Eigenaar: Bob (Drupal), daarna Claude (app).**
+**P2-1 · Datumfilter Vandaag / Dit weekend / Deze week · Drupal ✅ (Bob), app-kant
+voor 60% af (Claude, 2026-09-15) — de rest staat hieronder uitgeschreven.**
+
+*Drupal is klaar:* `datum_van` / `datum_tot`, formaat `yyyy-MM-dd HH:mm:ss`,
+lokale tijd, beide grenzen inclusief, werkt op alle zeven displays. Nagemeten
+door Claude: weekend 19-20 sep geeft 40 events (27 za + 13 zo, niets erbuiten),
+een lege waarde = geen filter (1775 items), één gezette grens filtert correct
+(114). Opbrengst landelijk op Uitgaan: **1525 → 637 (deze week) → 263 (dit
+weekend) → 37 (vandaag)**.
+
+*Wat er al staat (commit `870a7bc`, export-geverifieerd):*
+1. Custom functions **`filterDatumVan`** en **`filterDatumTot`** (String in,
+   String uit). `'vandaag'` / `'weekend'` / `'week'` geven de grenzen; **elke
+   andere waarde, ook leeg, geeft `''` = geen filter**. Lokaal in Dart getest
+   op jaargrens en beide DST-weekenden.
+2. API Call **`homeTabel`**: variabelen `datum_van` / `datum_tot` (lege default)
+   + query-parameters.
+3. Component **`HomeUitgaantabelKaartComponent`**: optionele parameters
+   `datumVan` / `datumTot`, doorgegeven aan de Backend Query.
+4. App State **`datumFilter`** (String, niet persisted, default leeg = Alles).
+5. **`homeCopy`** aangemaakt als vangnet vóór het Home-werk (Bob's verzoek).
+
+*Nog te doen — alleen op de pagina `home` zelf:*
+- **Per tab (5×) op de `HomeUitgaantabelKaartComponent`-instantie:**
+  `datumVan` = custom function `filterDatumVan(App State datumFilter)`,
+  `datumTot` = `filterDatumTot(App State datumFilter)`, en **Value Key** =
+  App State `datumFilter`.
+  ⚠️ **Die Value Key hoort op de instantie op Home, niet op de `StaggeredView`
+  binnen het component.** De `pagingController` komt uit `_model` van het
+  component; verandert alleen een key binnenin, dan blijft dat model (en dus de
+  oude, al geladen pagina's) staan. Een key op de instantie vervangt het hele
+  component inclusief model.
+- **Chips boven de TabBar**: een `Row` met vier knoppen — *Alles* (`''`),
+  *Vandaag* (`'vandaag'`), *Dit weekend* (`'weekend'`), *Deze week* (`'week'`).
+  Elke knop: On Tap → **Update App State** → `datumFilter` → Set Value →
+  **letterlijke tekst** (geen custom function; die zit al in de binding
+  hierboven). Standaard is *Alles* — Bob's keuze, en dat is meteen de
+  default-waarde van het App State-veld.
+- Daarna: verse export + profile-build, en controleren dat een filterwissel de
+  lijst écht opnieuw laadt (dat is waar de Value Key voor zit).
+
+*Zolang stap 1 niet gedaan is verandert er niets in de app: de parameters
+blijven leeg, dus de lijst gedraagt zich precies als voorheen.*
+
+**Oude omschrijving (achtergrond):**
 Met 6.202 komende events is "Uitgaan" een lijst van 3.275 items; zonder
 tijdsfilter scrolt niemand daar doorheen. Drupal-kant: twee exposed filters op
 `field_date_value` in `flutterflowmobiel1` (`datum_van` ≥, `datum_tot` ≤ —