Forráskód Böngészése

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 19 órája
szülő
commit
44cc5fba3a
2 módosított fájl, 40 hozzáadás és 89 törlés
  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
 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
 ("bevat dit item?"): geen aparte condition-operator, maar een
 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)
 
-**⚠️ 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,
@@ -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
 > 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
 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.*
 
 ### ✅ 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
   op `SelectStateDropDownComponent`: **"Gemeente volgen"** (`nosgkxy0`) en de
   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
   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
@@ -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
 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).
 Favorieten-hartje werkt "gewoon" als je uitgelogd bent, maar de server
 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
 (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
-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
 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
 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
 Roboto voor de koppen, de website houdt Droid Serif. Bewust verschil
 tussen app en site, geen actie meer nodig. De onderbouwing hieronder