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

Sessie 14 sep: standaard header+Drawer op 4 pagina's, datumvelden stadsactiviteit, media-knoppen, P1-44 bevestigd; TASKS/CLAUDE bijgewerkt

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bob 21 часов назад
Родитель
Сommit
b183c56009
2 измененных файлов с 120 добавлено и 116 удалено
  1. 53 0
      CLAUDE.md
  2. 67 116
      TASKS.md

+ 53 - 0
CLAUDE.md

@@ -759,6 +759,59 @@ al bekende freeze aan (zie hieronder) — sleep 'm bij twijfel meteen
 omhoog (drag op de titelbalk) vóórdat je gaat zoeken, dat voorkwam de
 omhoog (drag op de titelbalk) vóórdat je gaat zoeken, dat voorkwam de
 freeze in de 3e/4e poging elke keer.
 freeze in de 3e/4e poging elke keer.
 
 
+**De standaard header (AppBar + `HeaderButtonsComponent` + Drawer) op een
+pagina zetten — volledig recept, 2026-09-14 vier keer achter elkaar gelukt via
+browser-automation, geen slepen nodig.** Dit vervangt het sleep-recept
+hieronder. Referentie = de AppBar van `Login`/`Favorieten`:
+- **AppBar-eigenschappen** (AppBar-node selecteren, tree-filter `AppBar`):
+  Background Color → thema-token **Info**; Elevation **2**; **Show Default
+  Button uit**; AppBar Height **80 PX**; Toolbar Height **25 %** (klik eerst
+  het `%`-teken); **Add Bottom Section aan** (Bottom Height blijft 70); Center
+  Title aan; **Use Flexible Space aan**; **Add Background Widget aan**. Geeft in
+  de export exact `PreferredSize(80) > AppBar(info, automaticallyImplyLeading:
+  false, flexibleSpace: FlexibleSpaceBar(background: ...), bottom: 70,
+  toolbarHeight: height*0.25, elevation: 2)`.
+- **Component in de achtergrond:** "Add Background Widget" zet een
+  placeholder-`Image` in een nieuwe tree-node **AppBar Background**. Filter de
+  tree op `Image`, klik het **"+"-icoontje op de rij "AppBar Background"** →
+  compacte Insert-dropdown → **2e tab-icoon (Project Components)** → zoek
+  `HeaderButtons` → kaart aanklikken. Dat **vervangt** de placeholder in één
+  klik. Zet daarna in het rechterpaneel de Component Parameter
+  `showBackButton` aan (subpagina) of uit (drawer-bestemming).
+- **Drawer:** "+" op de **pagina-root** → zoek `Drawer` → kaart onder *Page
+  Elements* → er komt een lege Drawer-node. Klik **Edit Drawer** in het
+  rechterpaneel (het canvas toont dan "Empty Drawer"), dan "+" op de
+  Drawer-rij → Project Components → `drawerComponent`. **Zonder Edit Drawer
+  registreert de kaart-klik niet** (3x gezien op `wachtwoordVergeten`).
+- **Valkuilen in deze dropdown:** de eerste klik op het tab-icoon ná het
+  openen landt nooit — klik 'm twee keer met 3 s ertussen en zoom om te zien
+  dat de kaarten van Project Components zijn (anders zet je een kale `Column`
+  in de header, wat 1x gebeurde). Het zoekveld wil ook eerst een losse klik.
+- **Velden in het AppBar-paneel (AppBar Height, Toolbar Height, Elevation)
+  reageren alleen op `triple_click` + typen**, niet op `left_click`+`ctrl+a`.
+  Elevation liet bovendien in élke lange batch los; zet 'm in een eigen
+  tool-aanroep en commit met een klik op een label-tekst (niet op een
+  sectiekop, die klapt in).
+- Kleurdialoog: het "Search theme colors..."-veld pakt de eerste klik+typ
+  vaak niet — klik, wacht 2 s, typ `Info`, zoom, en klik pas dan het
+  resultaat. Landt de zoekterm niet, dan klik je "Primary" (bovenste rij) en
+  verandert er niets.
+
+**"Set Variable": `Date Picked N` (uitvoer van een Date/Time Picker) staat
+onder Widget State — zoek er NIET op.** De zoekterm `Date Picked` reduceert
+tot precies één bron en die rendert dan leeg (het bekende éénbron-probleem);
+`Date` geeft meer bronnen maar Widget State blijft ook dan leeg. Wat werkte
+(2026-09-14, 2x): zoekveld leeg laten, "Widget State" openklappen, 10 s
+wachten, en met `hover` over de rijen eronder gaan — dan verschijnen alle
+opties, ook `Date Picked 2`. Bij "DateTime Format Options" daarna
+**`triple_click` op het veld en dan `custom` typen**: een gewone klik zet de
+tekst midden in "relative => a moment ago".
+
+**Een verse exportmap bouwen: dit project heeft géén `.fvmrc` of `.fvm/`
+meer** — de notities elders die zeggen "kopieer die eerst" kloppen niet meer.
+`pubspec.lock` kopiëren + `fvm use 3.35.7 -f` in de exportmap volstaat
+(bevestigd 2026-09-14: analyze 0 errors, profile-APK gebouwd).
+
 **Een pagina die nog geen `Drawer`/`AppBar` heeft alsnog toevoegen
 **Een pagina die nog geen `Drawer`/`AppBar` heeft alsnog toevoegen
 (bv. een pagina zonder header/hamburger-menu): via slepen, niet via
 (bv. een pagina zonder header/hamburger-menu): via slepen, niet via
 rechtsklik.** Gevonden 2026-08-19 (Favorieten-pagina miste een
 rechtsklik.** Gevonden 2026-08-19 (Favorieten-pagina miste een

+ 67 - 116
TASKS.md

@@ -6,6 +6,44 @@ stadsactiviteit, tijdzone, media), de `.take(25)`-limiet op alle zes
 horeca-tabs, en de code-audit op de export van 21:00 (0 nieuwe bevindingen,
 horeca-tabs, en de code-audit op de export van 21:00 (0 nieuwe bevindingen,
 `dart analyze` 0 errors). De herbruikbare lessen staan in `CLAUDE.md`.*
 `dart analyze` 0 errors). De herbruikbare lessen staan in `CLAUDE.md`.*
 
 
+*Sessie 2026-09-14 (Claude, builder + verse export per stap, profile-build op
+de telefoon-emulator nagekeken): standaard header + Drawer op `mijnProfiel`,
+`wachtwoordVergeten`, `stadsactiviteitAanmaken`, `uitgaansevenementAanmaken`;
+datumvelden en API-datumargumenten op `stadsactiviteitAanmaken`; media-knoppen
+afgerond; P1-44 op toestel bevestigd (Uitgaan ≠ Cultuur & Info, geen grijze
+labels). Alles staat in de builder ("Synced") — **Bob: maak zelf even een
+FlutterFlow-commit op `main`**, de commit-knop in het Version Control-paneel
+reageerde niet op Claude's klik. `dart analyze` op de verse export: 0 errors.
+Emulator-5556 heeft nu de profile-APK van die export + per-app-locale `nl-NL`.*
+
+**Standaardzin voor de volgende chat:**
+
+> Pak de Favorieten-cluster uit `TASKS.md` op (sectie "Nieuw gevonden
+> 2026-09-14"), plus restpunt 4 op `stadsactiviteitAanmaken` als je tijd over
+> hebt. Je mag zelf in de Chrome-browser in de FlutterFlow-builder werken — ik
+> zit erachter. Stel eerst je 3-5 taken voor, wacht op mijn akkoord,
+> verifieer elke wijziging met een verse export en noem het taak-ID.
+
+### 🆕 Nieuw gevonden 2026-09-14 — Favorieten-cluster (kandidaat voor Claude)
+
+Gezien op de telefoon-emulator tijdens de eindcontrole, allemaal op
+`lib/favorieten/favorieten_widget.dart`, geen van alle blokkerend:
+1. **Losse tekst "Hello World" onderaan tab 1 (Persoonlijke agenda)** —
+   i18n-sleutel `wmho8j7h`, regel ±423, zichtbaar voor elke ingelogde
+   gebruiker onder de lijst. Staat er sinds export-commit `98d46ad`. Ofwel de
+   `Text` weghalen (Bob, Claude verwijdert niets) ofwel er een echte tekst van
+   maken; vermoedelijk een vergeten placeholder.
+2. **Knop "stadsactiviteit aanmaken" op tab 4 (Gebruiker) is logo-rood
+   (`primary`)** — tegen het merk-DNA ("rood is nooit knopkleur"); alle andere
+   knoppen zijn oranje (`secondary`). Fill Color → `secondary`. Sleutel
+   `fbl4ak2y`, regel ±1040. Ook de hoofdletter ("Stadsactiviteit aanmaken")
+   gelijktrekken met de andere labels.
+3. **Tekst "onbekend" direct onder die knop** — een gebonden waarde die leeg
+   is (Default Value `onbekend`); wat hij zou moeten tonen is niet af te lezen.
+   Bob: zeggen wat daar hoort, of de guard erop zetten (zelfde patroon als
+   P1-6).
+Niet gedaan omdat het buiten de afgesproken scope van 14 sep viel.
+
 ### ⛔ EERST DIT — de working tree compileert niet (2026-09-14)
 ### ⛔ EERST DIT — de working tree compileert niet (2026-09-14)
 
 
 De export van vannacht heeft drie pagina's naar de map `kanweg` verplaatst,
 De export van vannacht heeft drie pagina's naar de map `kanweg` verplaatst,
@@ -46,6 +84,18 @@ Alle drie door Claude aangemaakt tijdens de P2-15-tests, met toestemming:
 
 
 ### 🔧 Restpunten uit het werk van 13 sep
 ### 🔧 Restpunten uit het werk van 13 sep
 
 
+*Afgerond 2026-09-14 (Claude, builder + verse export per stap): restpunt 2 in
+gewijzigde vorm — Bob koos niet voor een losse banner maar voor de **standaard
+header** (AppBar 80 px / Info / elevation 2 / HeaderButtonsComponent met
+terugknop + Drawer met drawerComponent) op `mijnProfiel`, `wachtwoordVergeten`,
+`stadsactiviteitAanmaken` en `uitgaansevenementAanmaken`; daarmee staat de
+verbindingsbanner daar vanzelf ook. Restpunt 3 (datumvelden
+`stadsactiviteitAanmaken`: weergave `dd-MM-yyyy HH:mm`, API-argumenten
+rechtstreeks op `datePicked1/2` met `yyyy-MM-dd HH:mm:ss`) en het
+media-knoppen-deel van restpunt 4 (border radius 8, gelijk aan de
+evenementpagina). `datumVoorApi()` wordt nu nergens meer aangeroepen en kan
+bij P2-7 mee. Recept voor de header staat in `CLAUDE.md`.*
+
 **1 · Horeca tab 6 "Verhuur, catering" — Eigenaar: Bob (Claude komt niet in
 **1 · Horeca tab 6 "Verhuur, catering" — Eigenaar: Bob (Claude komt niet in
 dat paneel op deze pagina).** De andere vijf tabs lopen via
 dat paneel op deze pagina).** De andere vijf tabs lopen via
 `filterHorecagelegenheden`; tab 6 leest nog rechtstreeks uit zijn Backend Query.
 `filterHorecagelegenheden`; tab 6 leest nog rechtstreeks uit zijn Backend Query.
@@ -59,25 +109,9 @@ JSON-path staat al op `HorecagelegenheidoverzichtCall`; hij levert
 `?.toList() ?? []` in plaats van de crashende variant. Zie `CLAUDE.md` voor het
 `?.toList() ?? []` in plaats van de crashende variant. Zie `CLAUDE.md` voor het
 volledige recept.
 volledige recept.
 
 
-**2 · Verbindingsbanner ontbreekt op vier pagina's.** Het widget zit alleen in
-`HeaderButtonsComponent`, dus niet op `mijnProfiel`, `wachtwoordVergeten`,
-`stadsactiviteitAanmaken` en `uitgaansevenementAanmaken`. Op de twee
-**aanmaakpagina's** is het zinvol (formulier verzenden zonder netwerk); het
-neemt geen ruimte in. ⚠️ Zet het daar **niet** in een constructie die de
-bestaande layout onbegrensde hoogte geeft — zie de header-valkuil in
-`CLAUDE.md`.
-
-**3 · `stadsactiviteitAanmaken`: datumveld toont de rauwe waarde — Claude kan
-dit.** Het veld toont `2026-09-25 21:04:00.000`. Zelfde fix als op
-`uitgaansevenementAanmaken` is 13 sep gedaan: Set Form Field → DateTime Format
-→ Custom `dd-MM-yyyy HH:mm`, en de argumenten `datumStart`/`datumEind` van
-`stadsactiviteitCreate` rechtstreeks aan `datePicked1`/`datePicked2` hangen met
-`yyyy-MM-dd HH:mm:ss`.
-
 **4 · Cosmetisch op `stadsactiviteitAanmaken`** (laag, geen actie nodig): de
 **4 · Cosmetisch op `stadsactiviteitAanmaken`** (laag, geen actie nodig): de
 "Mijn gemeenten"-snelkoppeling vult de Stadseditor-keten eronder niet voor, dus
 "Mijn gemeenten"-snelkoppeling vult de Stadseditor-keten eronder niet voor, dus
-je kiest twee keer dezelfde gemeente. En de Media-knoppen zijn daar hoekig,
-terwijl ze op de evenementpagina afgerond zijn.
+je kiest twee keer dezelfde gemeente. *(Media-knoppen zijn 14 sep afgerond.)*
 
 
 **5 · Media-flow, twee kleinigheden** (uit de live test): de bronkeuze-sheet
 **5 · Media-flow, twee kleinigheden** (uit de live test): de bronkeuze-sheet
 zegt "Choose Source / Gallery / Camera" in het Engels — FlutterFlow-standaard,
 zegt "Choose Source / Gallery / Camera" in het Engels — FlutterFlow-standaard,
@@ -3213,105 +3247,22 @@ horeca-overzicht niet gewoon alfabetisch moet.
 P1-42 is afgemaakt; de uitkomst staat hierboven bij P1-42 als tabel. Deze
 P1-42 is afgemaakt; de uitkomst staat hierboven bij P1-42 als tabel. Deze
 taak kan weg zodra Bob de view-ronde in Drupal gedaan heeft.
 taak kan weg zodra Bob de view-ronde in Drupal gedaan heeft.
 
 
-**P1-44 · Eigenaar: Bob — alle vijf Home-tabs tonen dezelfde lijst.
-Fix is gebouwd, getest, en daarna BEWUST TERUGGEDRAAID; er ligt nog één
-blokkade, zie P1-45.** Gevonden en uitgezocht 2026-09-06 door Claude.
-- **Wat er mis is:** `home_widget.dart` geeft elke tab een eigen display
-  mee (`displayid: 'services_3'` t/m `'services_7'`, regels
-  303/328/365/402/439) aan `HomeUitgaantabelKaartComponentWidget`, maar
-  dat component gebruikt de parameter nergens: hij komt in
-  `home_uitgaantabel_kaart_component_widget.dart` alleen voor in de
-  declaratie (regels 25/28), en de enige aanroep is
-  `HomeTabelCall.call(page: ...)`. `HomeTabelCall` heeft
-  `display_id=services_2` hardcoded in de URL. Uitgaan / Activiteiten /
-  Cultuur & Info / Films / Jeugd tonen dus alle vijf `services_2`.
-  ("Cultuur & Info" klopt bij toeval — `services_2` en `services_5`
-  leveren dezelfde nids.)
-- **Wat er nu al klaarstaat in de builder (blijft staan, verandert niets
-  aan het gedrag):** de API Call `homeTabel` heeft een variabele
-  `display_id` (String, default `services_2`) plus een query-parameter
-  `display_id` die daaraan hangt. De hardcoded `?display_id=services_2`
-  in de URL mag blijven — de láátste query-parameter wint, los tegen
-  Drupal nagemeten.
-- **De enige resterende handeling:** Backend Query van de
-  `StaggeredView` in `HomeUitgaantabelKaartComponent` → "Set Additional
-  Variable" → Parameter Name `display_id` → Value = component-parameter
-  `displayid`. Dat is precies wat Claude gebouwd, geëxporteerd én op een
-  toestel geverifieerd heeft (Uitgaan toonde daarna services_3,
-  Activiteiten services_4 — allebei nagelegd tegen de API).
-- **Waarom het toch teruggedraaid is:** met de fix erin lopen de tabs
-  Activiteiten / Cultuur & Info / Films / Jeugd tegen P1-45 hieronder
-  aan. **Precieze schade, nagemeten:** de kaarten renderen gewoon, maar
-  in plaats van de groene categorielabels staat er een grijs blok. Geen
-  lege tabs dus. (Ik meldde eerst "Films werd volledig leeg" — dat klopte
-  niet: die tab was leeg omdat ik er met een *swipe* naartoe ging, en dat
-  gebeurt óók in de teruggedraaide staat. Zie het losse punt hieronder.)
-- **Dus: het terugdraaien is een keuze, geen noodzaak.** Wil je liever
-  meteen de juiste inhoud per tab en neem je grijze blokjes op de plek
-  van de labels voor lief tot je in Drupal zit — zet de binding dan
-  gerust terug, het is één handeling. Ik heb 'm eruit gehaald omdat de
-  app dan onberispelijk staat zoals je 'm kende, en omdat P1-45 toch in
-  dezelfde Drupal-ronde valt als P1-42.
-
-**Los punt, klein maar verwarrend bij het testen: naar een tab
-*swipen* laat 'm leeg; op het tablabel *tikken* niet.** Bevestigd
-2026-09-06 op de telefoon-AVD, in zowel de gefixte als de
-teruggedraaide staat — dus dit staat los van P1-44/P1-45 en zat er al.
-De tab blijft een leeg wit vlak tot je 'm opnieuw aantikt. Vermoedelijk
-haalt de `PagedMasonryGridView` zijn eerste pagina niet op bij een
-swipe-wissel. Niet uitgezocht; wel iets om te weten voordat je een lege
-tab als databug aanmerkt.
-
-**P1-45 · Eigenaar: Bob (Drupal/views) — `categorie` komt in de ene
-display als lijst en in de andere als komma-string, en daar crasht de
-Home-kaart op.** Gevonden 2026-09-06 tijdens P1-44.
-- Gemeten op `flutterflowmobiel1`, pagina 0 van elke display:
-  - **lijst** (goed): services_1, services_2, services_3 —
-    `"categorie": ["Kindvriendelijk", "Theater"]`
-  - **string** (fout): services_4, services_5, services_6, services_7 —
-    `"categorie": "Kindvriendelijk, Theater"`
-- ✅ **Hermeten 2026-09-12 — niet meer te reproduceren.** Met de nieuwe
-  vulling geven **alle zes meetbare displays een array**: services_1 (25 items),
-  _2 (25), _3 (17), _5 (25), _6 (1), _7 (7). De komma-string is weg. Alleen
-  **services_4 blijft ongemeten** — die staat op 0 items omdat
-  stadsactiviteiten handmatig worden aangemaakt en niet geïmporteerd. Controleer
-  bij die ene display de veldinstelling visueel en leg 'm gelijk aan
-  services_1; verder is deze taak klaar.
-- 🔎 *Eerdere hermeting 2026-09-11 — deels niet meer te reproduceren.*
-  `services_5` geeft nu wél een **lijst** terug (`["Voorstelling"]`), net als
-  1/2/3. Voor **services_4, _6 en _7 is het niet vast te stellen**: die geven
-  op dit moment landelijk 0 items, dus er is geen enkele waarde om naar te
-  kijken (zie de contentstand bovenaan deze lijst). Twee mogelijkheden en ik
-  kan er niet tussen kiezen: óf jij hebt services_5 al omgezet en 4/6/7 ook,
-  óf het formaat hing aan de data en niet aan de displayconfig.
-  **Praktisch advies:** controleer de veldinstelling van `categorie` op
-  services_4/_6/_7 gewoon visueel in de viewconfig en leg 'm gelijk aan die
-  van services_1 — dat kost je een minuut en is niet af te meten zolang die
-  tabs leeg zijn.
-- `HomeUitgaantabelKaartComponent` bouwt zijn groene categorielabels met
-  Generate Dynamic Children over `$.categorie`, wat in de export
-  `getJsonField(item, r'$.categorie').toList()` oplevert. Op een String
-  gooit dat `NoSuchMethodError: Class 'String' has no instance method
-  'toList'` — letterlijk zo in `logcat` gezien tijdens de P1-44-test.
-- In een **profile**-build is dat volledig stil: geen rood scherm, geen
-  overflow-streep, niets in `dart analyze`. De Films-tab was gewoon een
-  leeg wit vlak; Activiteiten toonde wél kaarten maar met een grijs blok
-  waar de labels horen.
-- **Beste fix, en meteen de goedkoopste: laat services_4 t/m services_7
-  hetzelfde lijstformaat teruggeven als services_1/2/3.** Dat is dezelfde
-  view, dus het is een veldinstelling per display — geen app-wijziging
-  nodig, en het lost het in één keer op voor élke plek die deze data
-  toont. Pak het mee in dezelfde ronde als P1-42.
-- **App-side alternatief is geprobeerd en loopt vast:** er staat nu een
-  custom function `categorieAlsLijst(dynamic categorie)` in het project
-  (geeft `List<dynamic>` terug, slikt zowel een lijst als een
-  komma-string). Die werkt, maar is **niet te binden**: de
-  "Generate Dynamic Children"-waardekiezer toont de bron "Custom
-  Functions" wel, maar klapt leeg open — geen enkele functie is
-  selecteerbaar voor het verwachte type `List<Anything>`. Vier pogingen,
-  ook na het return-type naar JSON+Is List te hebben gezet. De functie
-  mag blijven staan (kost niets) voor het geval jij 'm in jouw browser
-  wél gebonden krijgt.
+**P1-44 · AFGEROND (binding staat sinds commit `7094b43` weer in de export,
+`displayId: widget!.displayid` in `home_uitgaantabel_kaart_component_widget.dart`;
+2026-09-14 opnieuw geverifieerd op een verse export en op de telefoon-emulator).**
+Elke Home-tab geeft nu zijn eigen `services_3`..`_7` mee. De blokkade P1-45 is
+13 sep nagemeten weg (categorie is op alle zeven displays een lijst).
+
+**P1-45 · Eigenaar: Bob (Drupal/views) — één restpunt: `services_4` visueel
+nakijken.** Alle meetbare displays van `flutterflowmobiel1` geven `categorie`
+inmiddels als array (hermeten 12 en 13 sep). Alleen `services_4`
+(stadsactiviteiten) is niet te meten omdat hij landelijk 0 items heeft; leg de
+veldinstelling van `categorie` daar één keer visueel gelijk aan `services_1`.
+Ter herinnering waarom het ertoe doet: `HomeUitgaantabelKaartComponent` doet
+`getJsonField(item, r'$.categorie').toList()`, en op een String is dat een
+stille `NoSuchMethodError` (grijs blok i.p.v. labels). De custom function
+`categorieAlsLijst` mag blijven staan maar is niet te binden in Generate
+Dynamic Children.
 
 
 **P2-2 · Eigenaar: Onbepaald, bewust v2 (herbevestigd 2026-08-25 door
 **P2-2 · Eigenaar: Onbepaald, bewust v2 (herbevestigd 2026-08-25 door
 Bob).** Google Maps-**overzichtsweergave** (kaart met meerdere markers)
 Bob).** Google Maps-**overzichtsweergave** (kaart met meerdere markers)