Quellcode durchsuchen

Sessie 15 sep laat: link-styling op 12 detailteksten (P1-23-rest) en wisselend gemeente-volgen-label (P0-12-rest) afgerond; CLAUDE.md: Apply Opposite Statement + dialooggedrag

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bob vor 13 Stunden
Ursprung
Commit
44cc5fba3a
2 geänderte Dateien mit 40 neuen und 89 gelöschten Zeilen
  1. 16 0
      CLAUDE.md
  2. 24 89
      TASKS.md

+ 16 - 0
CLAUDE.md

@@ -942,6 +942,22 @@ meer geraden hoeft te worden. Zelfde aanpak werkt voor het latere
 "+"/"-"-toggle zonder de eigenlijke UNSET-rij; gewoon nogmaals klikken
 "+"/"-"-toggle zonder de eigenlijke UNSET-rij; gewoon nogmaals klikken
 op dezelfde positie totdat de rij verschijnt, meestal 2-3x).
 op dezelfde positie totdat de rij verschijnt, meestal 2-3x).
 
 
+**Een Visibility-conditie op "lijst bevat X" — of juist "bevat X NIET" — hoeft
+niet via Conditions → Single Condition: kies direct de lijst-variabele en zet
+"Apply Opposite Statement" aan voor de negatie.** Bevestigd 2026-09-15 (label
+"Gemeente volgen"/"Je volgt deze gemeente" op `SelectStateDropDownComponent`).
+De Visibility-dialoog heeft type Boolean; kies App State → de `List<String>` →
+Available Options **List Contains Item** → item via de pencil (geneste dialoog,
+zoek op `gemeenteSelect`, hover-truc) → dat levert al een Boolean op. De toggle
+**"Apply Opposite Statement"** (direct onder de variabelenaam) genereert
+`if (!FFAppState().lijst.contains(...))`. Geen Second Value, geen tweede
+dialoog, geen freeze-risico. Twee gedragingen van diezelfde dialoog die
+tijd kosten als je ze niet kent: (1) **het zoekfilter en een uitgeklapte
+sectie springen terug zodra je hovert of nog eens klikt** — maar laat je 'm
+na één klik op de chevron 20-30 s volledig met rust, dan renderen de opties
+vanzelf (zonder hover-truc); (2) na een `Duplicate` van een `Text` erft de
+kopie de **Engelse vertaling** van het origineel, dus check P1-17 daarna.
+
 **Checken of een `List<String>` App State-variabele een waarde bevat
 **Checken of een `List<String>` App State-variabele een waarde bevat
 ("bevat dit item?"): geen aparte condition-operator, maar een
 ("bevat dit item?"): geen aparte condition-operator, maar een
 transform binnen "Set from Variable".** Bevestigd 2026-08-11 op
 transform binnen "Set from Variable".** Bevestigd 2026-08-11 op

+ 24 - 89
TASKS.md

@@ -1,11 +1,15 @@
 ## ▶ Nu aan de beurt (stand 2026-09-14)
 ## ▶ Nu aan de beurt (stand 2026-09-14)
 
 
-**⚠️ Sessie 2026-09-15 (Claude, builder) — bezig:** link-styling op de 12
-klikbare teksten van `HorecagelegenheidCurrent` + `EvenementHorecagelegenheid`
-(restpunt P1-23, Eigenaar: Claude — bezig) en daarna het meewisselende
-label "Gemeente volgen"/"Je volgt deze gemeente" op
-`SelectStateDropDownComponent` (restpunt P0-12, Eigenaar: Claude — bezig).
-Raakt Home en de aanmaakpagina's niet.
+*Sessie 2026-09-15 laat (Claude, builder + verse export per stap, `dart analyze`
+0 errors): **restpunt P1-23** — de 12 klikbare teksten (website, menukaart,
+bestellink, Facebook, Twitter, Instagram) op `HorecagelegenheidCurrent` en
+`EvenementHorecagelegenheid` staan nu op Text Color `secondary` + onderstreept
+(6× `.secondary` + 6× `TextDecoration.underline` per bestand). **Restpunt
+P0-12** — het label naast het gemeentehartje op `SelectStateDropDownComponent`
+wisselt nu mee: "Gemeente volgen" (`!favorieteGemeenteIds.contains(...)`) /
+"Je volgt deze gemeente" (`contains(...)`, nieuwe sleutel `elx7kse2`). Beide
+taken zijn hiermee af en uit de lijst gehaald. Niet op een toestel nagekeken
+(puur styling en een Visibility-guard). FlutterFlow-commit: Bob.*
 
 
 
 
 *Afgerond en daarom verwijderd op 13/14 sep: verbindingsmelding in de header,
 *Afgerond en daarom verwijderd op 13/14 sep: verbindingsmelding in de header,
@@ -521,16 +525,15 @@ initialisatie in `main.dart`). Beslissing voor Bob; Claude kan (b) uitvoeren.
 
 
 > P2-28 en P2-27a zijn af. De 🚀-sectie wacht nu op mij: P2-1 en P2-26 hebben
 > P2-28 en P2-27a zijn af. De 🚀-sectie wacht nu op mij: P2-1 en P2-26 hebben
 > allebei eerst exposed filters op `flutterflowmobiel1` nodig (datum + title),
 > allebei eerst exposed filters op `flutterflowmobiel1` nodig (datum + title),
-> P2-27b is `_custom_clean_html`, en P1-50 is een keuze. Kies zelf een taak uit
-> de P1-lijst die zonder mij kan, of pak de twee restpunten van vandaag op:
-> de default van `gemeenteSelectId` (header toont "Kies je gemeente" na
-> Toepassen) en de favoriete-gemeente-chips die nog naar Home springen. Je mag
-> zelf in de Chrome-browser in de builder werken — verifieer elke wijziging met
-> een verse export en noem het taak-ID.
+> P2-27b is `_custom_clean_html`. De restpunten van 15 sep (gemeentenaam in
+> de header, chips op `safePop`, AdMob-consent, link-styling, wisselend
+> "Gemeente volgen"-label) zijn allemaal af. Kies zelf een taak uit de
+> P1-lijst die zonder mij kan. Je mag zelf in de Chrome-browser in de builder
+> werken — verifieer elke wijziging met een verse export en noem het taak-ID.
 
 
 *Stand 2026-09-14 avond: `lib/` in git is gelijk aan FlutterFlow (laatste
 *Stand 2026-09-14 avond: `lib/` in git is gelijk aan FlutterFlow (laatste
 export 22:20). Nog te doen door Bob: FlutterFlow-commit op `main` voor
 export 22:20). Nog te doen door Bob: FlutterFlow-commit op `main` voor
-restpunt 5, P1-49 en P2-19; keuze P1-50 (AdMob-consent); "Hello World" op
+restpunt 5, P1-49, P2-19, P2-28 en de sessie van 15 sep laat; "Hello World" op
 Favorieten tab 1.*
 Favorieten tab 1.*
 
 
 ### ✅ P1-49 · Hamburger/terugknop zat voor 60% onder de statusbalk — gebouwd 2026-09-14 (Claude, akkoord Bob), export-geverifieerd
 ### ✅ P1-49 · Hamburger/terugknop zat voor 60% onder de statusbalk — gebouwd 2026-09-14 (Claude, akkoord Bob), export-geverifieerd
@@ -1283,7 +1286,11 @@ maak description en code gelijk, en hernoem `$date_after_30`.
   `uitgaansevenementAanmaken` (19), plus de twee nieuwe teksten uit taak 22
   `uitgaansevenementAanmaken` (19), plus de twee nieuwe teksten uit taak 22
   op `SelectStateDropDownComponent`: **"Gemeente volgen"** (`nosgkxy0`) en de
   op `SelectStateDropDownComponent`: **"Gemeente volgen"** (`nosgkxy0`) en de
   uitlegzin **"Bij favoriete gemeenten krijg je een agenda per mail met daarin
   uitlegzin **"Bij favoriete gemeenten krijg je een agenda per mail met daarin
-  alle evenementen uit die favoriete gemeenten."** (`24bdnkhi`).
+  alle evenementen uit die favoriete gemeenten."** (`24bdnkhi`), en sinds
+  2026-09-15 ook **"Je volgt deze gemeente"** (`elx7kse2`) — let op: die kreeg
+  door `Duplicate` de *verkeerde* EN-tekst "Add to favorites" mee, dus niet
+  leeg maar fout; `nosgkxy0` staat in EN ook nog op "Add to favorites" en
+  hoort "Follow municipality" te worden.
 - **Titels met spaties vooraan/achteraan opschonen (was P1-47, verbreed
 - **Titels met spaties vooraan/achteraan opschonen (was P1-47, verbreed
   2026-09-11).** Bob mat op devbob **100+** `horecagelegenheid`-nodes met een
   2026-09-11).** Bob mat op devbob **100+** `horecagelegenheid`-nodes met een
   gewone ASCII-spatie vóór de titel (`LIMIT 100` liep vol, dus het werkelijke
   gewone ASCII-spatie vóór de titel (`LIMIT 100` liep vol, dus het werkelijke
@@ -2355,61 +2362,6 @@ afgewezen** — Bob 2026-09-04: "nee, dit is overzichtelijk, houden zo".
 Het menu blijft dus 21 items met twee gescheiden blokken. Uit deze lijst
 Het menu blijft dus 21 items met twee gescheiden blokken. Uit deze lijst
 verwijderd.)*
 verwijderd.)*
 
 
-**P0-12 · Eigenaar: Bob — grotendeels AL OPGELOST, alleen de tekstregel
-rest.** Oorspronkelijk: twee identieke hartjes met verschillende
-betekenis op één scherm (header = gemeente favoriet, pagina =
-gelegenheid favoriet). **Geverifieerd 2026-09-04 (Claude, code-only op
-een verse export): de gekozen fix — "het gemeentehartje uit de header
-halen en één keer bij de gemeentekeuze zetten" — is al doorgevoerd.**
-`header_buttons_component_widget.dart` bevat geen `Icons.favorite` en
-geen `favorieteGemeenteIds` meer (alleen nog 2 `FlutterFlowIconButton`s:
-hamburger + terug); het gemeentehartje staat nu op
-`select_state_drop_down_component_widget.dart`:359-375, naast het label
-"Toevoegen favoriet". Git bevestigt het pad: toegevoegd aan de header in
-`d8bbba4` (P1-26), er weer uit in de export-commit `98d46ad`. De versie
-mét hartje is bewaard als het component `HeaderButtonsComponentCopyMetHartje`
-(`lib/components/header_buttons_component_copymethartje_*`) — nergens
-meer geïmporteerd, dus vrij om weg te gooien, zie P2-7.
-
-**Wat nog rest (klein, wording is Bob's keuze):**
-1. Het label bij het hartje heet nu "Toevoegen favoriet" — generiek.
-   "Gemeente volgen" maakt het onderscheid met "bewaren" van een
-   gelegenheid meteen duidelijk.
-2. De regel die de site wél gebruikt ontbreekt nog volledig in de app:
-   dat je die gemeente **donderdags in de agendamail** krijgt.
-   Geverifieerd met `grep`: geen enkele treffer op "agendamail" /
-   "donderdag" in `lib/`. Dat verband is dus nergens zichtbaar.
-   *(Claude heeft de homepage van uitgaanskrant.com opgehaald en
-   doorzocht op "agendamail"/"donderdag"/"nieuwsbrief" — 0 treffers, de
-   zin staat blijkbaar op een dieper liggende pagina of achter login.
-   **Bob moet de exacte zin aanleveren**, die verzint Claude niet.)*
-
-**Exacte plek en stand (Claude, 2026-09-04, verse export):**
-`lib/selecteer_plaats/select_state_drop_down_component/select_state_drop_down_component_widget.dart`
-— de `Row` op regel **337**, direct ónder de gemeente-dropdown, met twee
-kinderen: een `Text` (regel 341, i18n-sleutel **`nosgkxy0`** =
-"Toevoegen favoriet") en een `Builder` (regel 358) die op
-`FFAppState().favorieteGemeenteIds.contains(gemeenteSelectId)` wisselt
-tussen een gevuld en een outline hartje. Beide takken doen een
-`drupalRequest POST` naar
-`/nl/flutterdrup/favorieten/flag.json` resp. `unflag.json` met
-`{"entity_id": <gemeenteSelectId>, "entity_type": "taxonomy_term"}`.
-Het component zit op de pagina `Selectprovinciegemeente`.
-
-**Twee dingen die daarbij opvielen en niet in de oorspronkelijke
-taakomschrijving stonden:**
-- **Het label is statisch.** De `Text` staat búiten de `Builder`, dus er
-  staat óók "Toevoegen favoriet" wanneer de gemeente al favoriet ís en
-  het hartje bij tikken juist *verwijdert*. Dat is precies het soort
-  dubbelzinnigheid dat P0-12 wilde oplossen. Wil je het echt netjes:
-  het label mee laten wisselen ("Gemeente volgen" / "Je volgt deze
-  gemeente"), wat betekent dat de `Text` de `Builder` in moet.
-- **Er staat geen enkele Visibility-conditie op die `Row`.** Hij is dus
-  ook zichtbaar vóórdat er een gemeente gekozen is (`gemeenteSelectId`
-  nog leeg) en zonder ingelogd te zijn — een tik verstuurt dan een
-  `flag.json`-POST met een lege `entity_id` en lege sessiewaarden.
-  Nog niet live nagespeeld, dus niet bevestigd wat de server dan doet.
-
 **P0-13 · AFGEROND 2026-09-09 (Claude + Bob, sessie 71).
 **P0-13 · AFGEROND 2026-09-09 (Claude + Bob, sessie 71).
 Favorieten-hartje werkt "gewoon" als je uitgelogd bent, maar de server
 Favorieten-hartje werkt "gewoon" als je uitgelogd bent, maar de server
 krijgt niets — de app liegt dan tegen de gebruiker.**
 krijgt niets — de app liegt dan tegen de gebruiker.**
@@ -2560,9 +2512,9 @@ Text-widget's eigen Actions-tab — geen `InkWell`-wrap nodig gebleken).
 zelfde patroon) zijn tegelijk meegepakt. Bevestigd via verse export
 zelfde patroon) zijn tegelijk meegepakt. Bevestigd via verse export
 (5 `launchURL`-aanroepen). Alle 4+2 velden hadden al de "Is Set and
 (5 `launchURL`-aanroepen). Alle 4+2 velden hadden al de "Is Set and
 Not Empty"-guard uit P0-8, dus geen los crash-risico meer zoals bij
 Not Empty"-guard uit P0-8, dus geen los crash-risico meer zoals bij
-het oorspronkelijke P1-15. **Nog geen visuele link-styling** (kleur/
-underline) — puur cosmetisch restpunt, functioneel al klaar. Uit deze
-lijst verwijderd.)*
+het oorspronkelijke P1-15. Link-styling (Text Color `secondary` + onderstreping) op alle 6 + de 6
+zusterteksten in `EvenementHorecagelegenheid` toegevoegd 2026-09-15 (Claude).
+Uit deze lijst verwijderd.)*
 
 
 *(P1-18 afgerond 2026-08-10 avond — Bob, builder + Custom Code, in
 *(P1-18 afgerond 2026-08-10 avond — Bob, builder + Custom Code, in
 twee stappen. Root cause was een dubbele bug: (1) `login_widget.dart`
 twee stappen. Root cause was een dubbele bug: (1) `login_widget.dart`
@@ -5306,23 +5258,6 @@ Tegelijk gebouwd: `HeaderButtonsComponent` toont nu
 `pushNamed(SelectprovinciegemeenteWidget.routeName)`, zodat zichtbaar is
 `pushNamed(SelectprovinciegemeenteWidget.routeName)`, zodat zichtbaar is
 wélke gemeente actief is en hoe je die wisselt.)*
 wélke gemeente actief is en hoe je die wisselt.)*
 
 
-**P2-19 restpunt · Eigenaar: Bob.** Nu iedereen op Home start, is nergens
-zichtbaar **welke gemeente actief is** — de lijstschermen tonen dat niet,
-en de gemeentekeuze is alleen nog via de drawer ("Zoek stad", bovenaan)
-te bereiken. Voorstel uit de merkanalyse: de gekozen gemeente als
-klikbare regel in de header, bv. "Amsterdam · wijzigen". De bouwstenen
-liggen klaar: App State **`gemeenteSelectNaam`** (persistent via secure
-storage, naast `gemeenteSelectId`, default `'28694'`) en
-`HeaderButtonsComponent`
-(`lib/components/header_buttons_component_widget.dart`) — een `Row` met
-op dit moment alleen een hamburger-knop (met `AlignedTooltip` "Menu
-openen") en een conditionele terugknop achter parameter
-`showBackButton`. Daar een `Text` bij die aan `gemeenteSelectNaam` hangt,
-met een On-Tap naar het keuzescherm. Let op de bekende valkuil: bij een
-geselecteerde **component-root** staat het **Component Name**-veld op
-vrijwel dezelfde plek als "Search properties...", dus verifieer vóór het
-typen welk widget geselecteerd is.
-
 **P2-20 · AFGEWEZEN 2026-09-08, Bob's besluit: niet doen.** De app houdt
 **P2-20 · AFGEWEZEN 2026-09-08, Bob's besluit: niet doen.** De app houdt
 Roboto voor de koppen, de website houdt Droid Serif. Bewust verschil
 Roboto voor de koppen, de website houdt Droid Serif. Bewust verschil
 tussen app en site, geen actie meer nodig. De onderbouwing hieronder
 tussen app en site, geen actie meer nodig. De onderbouwing hieronder