Browse Source

Conditionele blokken op zoek-stad en profiel (taken 1-5 af)

Taak 1: het blok "of kies een favoriet" op SelectStateDropDownComponent hing aan
de login-status en toonde dus een kop boven een lege lijst; nu aan
favorieteGemeentenLijst.isNotEmpty.

Taken 2-4: op mijnProfiel tab "Mijn evenementen" verschenen kop en lijst ook
zonder horecagelegenheid. Page state mijnHorecaRespons (JSON/Is List) gevuld via
On Page Load, en beide widgets achter isNotEmpty. Het horeca-blok eronder blijft
altijd staan - dat is de enige ingang naar het aanmaken van een zaak.

Taak 5: EN-vertaling van "Bekijk alles" stond op "+ Add" (op twee tabs); beide
nu "See all".

Geverifieerd met verse exports: 0 errors, guards op de juiste widgets.

CLAUDE.md: recept voor conditioneren op data uit een sibling-FutureBuilder, en
de export-diff als controle op een vertaalronde. TASKS.md: mijnProfielCopy3 en
SelectStateDropDownComponentCopy2 op de opruimlijst.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 20 hours ago
parent
commit
6f2fe56718
2 changed files with 40 additions and 3 deletions
  1. 34 0
      CLAUDE.md
  2. 6 3
      TASKS.md

+ 34 - 0
CLAUDE.md

@@ -4039,6 +4039,40 @@ null`**; staat die er niet, dan heb je de verkeerde route genomen. En let op: de
 lukt dat na een paar pogingen niet, dan is dit een taak voor Bob's eigen browser
 in plaats van een reden om de bovenstaande snelle route te nemen.
 
+**Een blok tonen/verbergen op "heeft de gebruiker items X?" waarvan de data in
+een SIBLING-FutureBuilder zit: page state van het type JSON + Is List, en dan
+"Is Set and Not Empty" als conditie.** Volledig gelukt 2026-09-20 op `mijnProfiel`
+(het evenementenblok alleen tonen aan wie een horecagelegenheid heeft). Het
+probleem: de lijst met zaken hangt aan een Backend Query op een ListView, en die
+respons is buiten die eigen subtree niet leesbaar — een blok erboven kan er dus
+niet op conditioneren. Werkende keten, geen custom function en geen Single
+Condition nodig:
+1. pagina-root → State Management → **+ Add Field**, Type **JSON** met **Is List**
+   aan (een List-typed page state krijgt in de Set-from-Variable-dialoog de
+   lijst-transforms, net als een App State-lijst);
+2. **On Page Load** → *Backend Call* naar hetzelfde endpoint → *Update Page State*
+   met **Action Outputs → JSON Body → No Further Changes**. Doe die tweede actie in
+   de **Action Flow Editor** (knop *Edit*, dan het `|<` om de trigger-kolom in te
+   klappen) — in het compacte Actions-paneel reageert het Value-veld niet;
+3. per te verbergen widget: Visibility → Conditional → bron = die page state →
+   Available Options → **Is Set and Not Empty**. Levert
+   `if (_model.veld.isNotEmpty)`.
+Kost één extra GET, maar je verdient 'm terug: een verborgen `FutureBuilder`
+wordt niet gebouwd, dus de call van het verborgen blok vertrekt ook niet meer.
+On Page Load draait ná de eerste build, dus het blok begint verborgen en
+verschijnt — dat is de goede richting voor dit soort guards.
+
+**Controleer een vertaalronde met een DIFF tussen twee exports, niet met een grep
+op de nieuwe waarde.** Bevestigd 2026-09-20: een `Bekijk alles`-knop moest van
+`+ Add` naar `See all`, en de wijziging landde op de knop van de *andere* tab —
+beide sleutels hadden dezelfde Nederlandse tekst en dezelfde foute Engelse. Een
+grep op "staat `See all` er?" had dat "ja" genoemd. Bewaar dus de exportmap van
+vóór de ronde en draai
+`diff <oud>/lib/flutter_flow/internationalization.dart <nieuw>/...` — dat toont in
+één keer wélke sleutels echt veranderd zijn, inclusief de wijzigingen die je niet
+gevraagd had. Zelfde diff verraadt ook nieuwe dode kopieën: een gedupliceerde
+pagina/component duikt op als een compleet nieuw blok met `// <naam>Copy<N>`.
+
 **Een widget kan zijn EIGEN Backend-Query-response niet gebruiken in
 zijn eigen Visibility-conditie — wel in zijn Options.** De
 Set-from-Variable-dialoog toont die response daar simpelweg niet als

+ 6 - 3
TASKS.md

@@ -334,9 +334,12 @@ niet op de toegestane lijst", niet "display bestaat niet".
   ongeldig verkeer. Zodra hij uit staat schiet Claude `tel-04-horeca.png` opnieuw.
 
 - **Builder-opruimronde, laatste restanten.** Nog in de export: componenten
-  `SliderUitgaanComponentSmallCurrent` en
-  `PUitgaantabelKaartComponentOrgineelMetKaartjeerin` en de custom function
-  `dISABLEdatumVoorApi`.
+  `SliderUitgaanComponentSmallCurrent`,
+  `PUitgaantabelKaartComponentOrgineelMetKaartjeerin` en
+  `SelectStateDropDownComponentCopy2`, de pagina `mijnProfielCopy3` (staat alleen
+  als route in `nav.dart`, niets navigeert ernaartoe) en de custom function
+  `dISABLEdatumVoorApi`. (De laatste twee kopieën ontstonden 2026-09-20 bij het
+  oefenen op taak 2-4.)
 
   ⚠️ **Pagina `Event`: laten staan, dit is een doodlopend spoor.** Bob bevestigde
   2026-09-20 dat óók *hernoemen* afketst op "Invalid Action" — verwijderen,