Browse Source

P2-45a af (Bob): datumKnopLabel gebonden met default 'Datum'

CLAUDE.md gecorrigeerd: de Confirm-knop van "Set Function Arguments" is
niet dood — hij weigert zolang Default Variable Value leeg is, en die
foutmelding staat onder het laatste veld, buiten beeld.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 3 hours ago
parent
commit
11acdcffd3
2 changed files with 38 additions and 31 deletions
  1. 21 12
      CLAUDE.md
  2. 17 19
      TASKS.md

+ 21 - 12
CLAUDE.md

@@ -4152,19 +4152,28 @@ herhaald in één sessie:
   Options" i.p.v. ±34 px.
 
 **Een gewone variabele-binding (App State, Widget State) wordt DIRECT toegepast
-als je de optie aanklikt — maar een binding met een custom function heeft een
-Confirm nodig, en die knop reageert structureel niet op browser-automation.**
-Bevestigd 2026-09-18 op een `Text` op Home. Een klik op bv. App State →
-`datumFilter` sluit de dialoog zelf en het rechterpaneel toont de binding meteen:
-klaar, geen Confirm. Kies je in diezelfde dialoog een **Custom Function**, dan komt
-er een "Set Function Arguments"-blok bij en moet je wél Confirm klikken — en dáár
-gebeurde 8 keer niets (losse klik, hover+klik, `double_click`, Return, en na de
-dialoog omhoog te hebben gesleept; de knop licht wel op bij hover). **Remove en
-Cancel in diezelfde knoppenrij werken wél**, dus de dialoog is niet bevroren.
+als je de optie aanklikt. Een binding met een custom function heeft een Confirm
+nodig — en die weigert stil zolang "Default Variable Value" leeg is.** Bevestigd
+2026-09-18/19 op een `Text` op Home. Een klik op bv. App State → `datumFilter`
+sluit de dialoog zelf en het rechterpaneel toont de binding meteen: klaar, geen
+Confirm. Kies je een **Custom Function** met een **nullable** return (`String?` —
+dat is de default voor een custom function), dan eist FlutterFlow een default,
+want een `Text` kan geen `null` tonen. **De Confirm-knop doet dan niets en de
+foutmelding "A default value is required" staat onderaan de dialoog, ónder het
+veld "UI Builder Display Value" — buiten Claude's zichtbare gebied.** Vandaar de
+indruk van een dode knop: 8 pogingen (losse klik, hover+klik, `double_click`,
+Return, dialoog verslepen) zonder effect, terwijl Remove en Cancel in diezelfde
+rij wél werkten. **Vuistregel: krijg je Confirm niet, `zoom` dan eerst op de
+ruimte tussen het laatste veld en de knoppenrij** vóór je concludeert dat de
+dialoog kapot is.
+⚠️ **Let op wat die default doet:** `valueOrDefault` (zie `flutter_flow_util.dart`
+regel 47) substitueert bij `null` **én bij een lege string**. Een functie die
+bewust `''` teruggeeft om een widget te laten verdwijnen, toont dus altijd de
+default. Wil je echt "niets", vul dan een **spatie** in plaats van een woord.
 ⚠️ **Een half gebonden functie-argument BLOKKEERT de export** (`Status: 400`,
-Issues-teller +1) — precies zoals bij een List-typed custom-action-argument. Merk
-je dat je Confirm niet krijgt: klik **Remove** (dat werkt) vóór je verdergaat,
-anders ligt de export plat voor élke sessie. Draag de binding daarna over aan Bob.
+Issues-teller +1) — precies zoals bij een List-typed custom-action-argument. Kom
+je er niet uit: klik **Remove** (dat werkt) vóór je verdergaat, anders ligt de
+export plat voor élke sessie.
 
 **Het commandopalet (de zoekbalk bovenin) negeert structureel de EERSTE
 typ-actie.** Het palet opent wel, maar toont dan de resultaten van je vórige

+ 17 - 19
TASKS.md

@@ -27,11 +27,10 @@ klopt sinds je 'm las.*
    hieronder. Deel A (Drupal) bij Bob, deel B (app) bij Claude.
 5. **P2-44 · datum-icoon zonder datum op `EventCurrent`** — ⚠️ niet gelukt via
    browser-automation, ligt bij Bob; zie het blok verderop voor de valkuil.
-6. ~~**P2-45 · knop "Selecteer datum" naast de datumchips op Home**~~ — **GEBOUWD
-   2026-09-18 (Claude), export-geverifieerd.** Restpunten verderop: **P2-45a**
-   (mooier label via `datumKnopLabel` — moet Bob doen, de Confirm-knop van die
-   dialoog werkt niet voor Claude), **P2-45b** (annuleren zet het filter op vandaag)
-   en **P2-45c** (chiplabels korter maken).
+6. ~~**P2-45 · knop "Selecteer datum" naast de datumchips op Home**~~ — **AF**
+   (Claude 2026-09-18, label door Bob 2026-09-19), export-geverifieerd. Nog open,
+   allebei klein: **P2-45b** (annuleren van de kiezer zet het filter op vandaag)
+   en **P2-45c** (chiplabels korter maken zodat ze op één regel passen).
 7. **89a · kopie-component `HeaderButtonsComponentCopy` opruimen · Eigenaar:
    Bob.** Taak 89 (logo boven de gemeentenaam in de header) is **af** en
    gecommit (`4c3f0aa`); deze kopie is vooraf op Bob's verzoek als vangnet
@@ -42,13 +41,13 @@ klopt sinds je 'm las.*
    2026-09-18 op Bob's vraag. Teksten NL+EN staan kant-en-klaar in het blok
    hieronder; alleen nog plaatsen in de builder. Pak dit samen met taak 87 op,
    die overlapt met de regel bij "Uw Horecagelegenheid".
-9. **94 · P-Uitgaan toont op een tablet ÉÉN kolom** waar Home er drie toont —
+9. **94 · P-Uitgaan toont op een tablet ÉÉN kolom** · Eigenaar: Claude — bezig (2026-09-18).** waar Home er drie toont —
     `PagedListView` i.p.v. `StaggeredView`. Zie blok verderop.
-10. **95 · geen Empty List Widget** op P-Uitgaan en op de 6 provincie-horeca-tabs.
+10. **95 · geen Empty List Widget** · Eigenaar: Claude — bezig (2026-09-18).** op P-Uitgaan en op de 6 provincie-horeca-tabs.
     Zie blok verderop.
-11. **96 · AdBanner op de horeca-overzichten** (gemeente + provincie) — besluit
+11. **96 · AdBanner op de horeca-overzichten** · Eigenaar: Claude — bezig (2026-09-18).** (gemeente + provincie) — besluit
     Bob 2026-09-18. Zie blok verderop, inclusief één openstaande scope-vraag.
-12. **97 · zoekveld ook op de provincie-horeca-pagina** — besluit Bob 2026-09-18.
+12. **97 · zoekveld ook op de provincie-horeca-pagina** · Eigenaar: Claude — bezig (2026-09-18).** — besluit Bob 2026-09-18.
     Zie blok verderop.
 
 ## 🎯 KLAARGEZET VOOR BOB — 2026-09-18 avond (door Claude, sessie "livegang-vooruitwerken")
@@ -1050,16 +1049,15 @@ telefoon-emulator bekeken (zie screenshots in `~/uk-shots/2026-09-16/na-*.png`).
   een `Text` gebonden aan `FFAppState().datumFilter`, zodat zichtbaar is wélk filter echt
   actief is: een chip blíjft namelijk gemarkeerd nadat je een datum kiest (FlutterFlow
   kan een choice-chip-selectie niet wissen). **Drie restpunten:**
-- **P2-45a · label mooier maken · Eigenaar: Bob (1 minuut in zijn eigen browser).**
-  De custom function **`datumKnopLabel(filter)`** staat klaar (Custom Code → Functions):
-  `dd-MM-yyyy` bij een datum, een **lege string** bij een chipwaarde — dan verdwijnt de
-  tekst netjes als een chip actief is. Zet op Home → `Row` → de laatste `Text` de waarde
-  op Custom Functions → `datumKnopLabel`, argument `filter` = App State `datumFilter`.
-  ⚠️ **Claude kan dit niet afmaken:** in de "Set Function Arguments"-dialoog reageert de
-  **Confirm-knop structureel niet** op browser-automation (8 pogingen, ook na de dialoog
-  te verslepen; Remove en Cancel in diezelfde knoppenrij werken wél). Blijft zo'n binding
-  half staan, dan **blokkeert dat de hele export** (`Status: 400`) — dat gebeurde
-  2026-09-18 één keer en is meteen met Remove teruggedraaid.
+- **P2-45a · ✅ AF 2026-09-19 (Bob, in de builder), export-geverifieerd.** De
+  `Text` naast de kalenderknop staat op `datumKnopLabel(datumFilter)` met als
+  Default Variable Value **`Datum`**. Die default was verplicht (FlutterFlow
+  weigert een nullable functie op een `Text` zonder), en `valueOrDefault`
+  vervangt óók een **lege** string — dus de tekst leest **"Datum"** zolang er een
+  chip actief is, en `19-09-2026` zodra er een datum gekozen is. Dat is een
+  bewuste uitkomst: het woord labelt meteen de kalenderknop. Wil je dat het
+  helemáál verdwijnt bij een chip: zet in datzelfde veld één **spatie** i.p.v.
+  `Datum`.
 - **P2-45b · annuleren van de datumkiezer · Eigenaar: Bob (besluit) / Claude (uitvoering).**
   FlutterFlow genereert zelf: annuleer je de kiezer nádat je eerder een datum koos, dan
   zet hij `datePicked` op vandaag en wordt het filter dus **vandaag** i.p.v. ongewijzigd.