Просмотр исходного кода

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 12 часов назад
Родитель
Сommit
6f2fe56718
2 измененных файлов с 40 добавлено и 3 удалено
  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
 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.
 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
 **Een widget kan zijn EIGEN Backend-Query-response niet gebruiken in
 zijn eigen Visibility-conditie — wel in zijn Options.** De
 zijn eigen Visibility-conditie — wel in zijn Options.** De
 Set-from-Variable-dialoog toont die response daar simpelweg niet als
 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.
   ongeldig verkeer. Zodra hij uit staat schiet Claude `tel-04-horeca.png` opnieuw.
 
 
 - **Builder-opruimronde, laatste restanten.** Nog in de export: componenten
 - **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
   ⚠️ **Pagina `Event`: laten staan, dit is een doodlopend spoor.** Bob bevestigde
   2026-09-20 dat óók *hernoemen* afketst op "Invalid Action" — verwijderen,
   2026-09-20 dat óók *hernoemen* afketst op "Invalid Action" — verwijderen,