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

TASKS/CLAUDE: P1-54 gebouwd, P2-35 Agenda-tab gebouwd (tabvolgorde + crossAxisCount-0 open), lessen Combine Text/tabs

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bob 13 órája
szülő
commit
75c3edf165
2 módosított fájl, 102 hozzáadás és 39 törlés
  1. 26 0
      CLAUDE.md
  2. 76 39
      TASKS.md

+ 26 - 0
CLAUDE.md

@@ -797,6 +797,32 @@ hieronder. Referentie = de AppBar van `Login`/`Favorieten`:
   resultaat. Landt de zoekterm niet, dan klik je "Primary" (bovenste rij) en
   verandert er niets.
 
+**"Combine Text" werkt gewoon als bron in "Set from Variable" — twee variabelen
+en een letterlijke tekst in één `Text`.** Bevestigd 2026-09-17 (P1-54,
+`EvenementInfo`): Text-waarde → potlood → zoek `Combine` → klik de bronregel
+**Combine Text** zelf (de "No Available Options" eronder is misleidend) → per
+regel "Text N": het icoontje naast het label bindt een variabele, het tekstveld
+neemt een letterlijke waarde (`, `), "Add Text" voegt een regel toe → Confirm.
+Export: `'${widget!.adres}, ${widget!.plaats}'`. Let op: er zit géén
+`valueOrDefault` meer omheen, dus een `null`-parameter wordt letterlijk "null".
+
+**Tabs van een `TabBar` zijn NIET te herordenen via de widget tree — dood
+spoor.** Bevestigd 2026-09-17 (P2-35): een `Tab`-rij op de `TabBar`-rij droppen
+geeft de toast *"Tab can only be added to TabBar"* (ook op andere x-posities),
+en op een andere Tab-rij droppen verplaatst alléén de Tab, niet zijn TabBar
+Page — het canvas breekt dan (Undo herstelt). Ook inhoud van de ene TabBar Page
+naar de andere slepen landt niet (3× geprobeerd, wel binnen dezelfde pagina).
+Een nieuwe tab komt dus altijd achteraan; wil je 'm vooraan, dan is dat een
+vraag voor Bob. Wat wél werkt: **"+" op de TabBar Page-rij → 2e tab-icoon
+(Project Components) → zoek op de VOLLEDIGE componentnaam-prefix**
+(`HorecagelegenheidEvent`; een deelwoord als `EventTabel` geeft alleen
+Marketplace-resultaten) → kaart → daarna de parameters binden. **De tree loopt
+na zo'n insert vaak achter** (nieuwe node zonder chevron); ga af op de export.
+
+**Een subtree in één keer weghalen: rechtsklik de node → rode prullenbak in de
+zwevende iconenbalk.** "Remove Widget" haalt alleen die ene node weg en tilt de
+kinderen op. Bevestigd 2026-09-17 op `Expanded > Container > Column > component`.
+
 **"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);

+ 76 - 39
TASKS.md

@@ -101,8 +101,9 @@ de website-homepage; `/nl/user/register` is anoniem bereikbaar (200).
   account verwijderen"). (a) is netter, (b) is 1 minuut.
 
 - **74 · P1-62 · De evenementen-agenda op een horecapagina is op een telefoon
-  onleesbaar: de items lopen over elkaar heen. Eigenaar: onbepaald (zie de
-  waarschuwing hieronder) — gevonden 2026-09-16 laat (Claude, profile-build op
+  onleesbaar: de items lopen over elkaar heen. Eigenaar: Claude — bezig
+  (sessie 2026-09-17, akkoord Bob; pakt taak 75 in dezelfde ronde mee, zelfde
+  component) — gevonden 2026-09-16 laat (Claude, profile-build op
   emulator-5556, 411 dp).** Screenshot:
   `~/uk-shots/2026-09-16/bug-horeca-agenda-gridview.png` (zaak Bitterzoet,
   Info-tab).
@@ -135,7 +136,7 @@ de website-homepage; `/nl/user/register` is anoniem bereikbaar (200).
   regressie van de look&feel-ronde van 16 sep.
 
 - **75 · Drie events per 92 hebben `categorie: null` — de agenda-code rekent
-  daar niet op. Eigenaar: onbepaald, klein.** Gevonden bij dezelfde controle:
+  daar niet op. Eigenaar: Claude — bezig (sessie 2026-09-17, samen met 74).** Gevonden bij dezelfde controle:
   `flutterflowmobiel_establishment_events` gaf op 92 events van 120 Amsterdamse
   zaken **3× `"categorie": null`** (alle drie bij horecanid 75457,
   Natuurtheater Zeddam). Dezelfde regel als hierboven doet
@@ -347,8 +348,13 @@ de twee dingen die daar niet in voorkomen, gezien op de telefoon-emulator.*
    als een verkeerde `size`.
 2. **Het menu is lang doordat het Gemeente-blok en het Provincie-blok dezelfde
    zeven rijen herhalen** (Uitgaan, Activiteiten, Cultuur, Films, Jeugd, Horeca,
-   Thuis bezorgen). Overweeg het Provincie-blok standaard ingeklapt te tonen.
-   **Besluit voor Bob**, want het verandert hoe mensen navigeren.
+   Thuis bezorgen). **Besluit Bob 2026-09-17: menu blijft zoals het is, beide
+   blokken uitgeklapt — niet opnieuw voorstellen.** Onderzoek Claude: 19
+   ListTiles × 48 dp minimum = 912 dp, past nooit op 731 dp; alleen een andere
+   structuur (één categorielijst met twee tikdoelen per rij) zou passen, en
+   dat wil Bob niet. Wat wél gebeurt (Bob, taak 7 van 2026-09-17): padding
+   boven het logo 40 → 8 en de Terug-knop onderaan (met zijn 48 dp
+   bodem-padding) eraf, want tikken naast de drawer sluit 'm al.
 
 *Hangt samen met P1-50:* op `PUitgaanPage` staat een zwart **"Ad Loading…"**-blok.
 In een testbuild is dat de placeholder, maar zonder consent-initialisatie is dit
@@ -611,13 +617,18 @@ telefoon-emulator bekeken (zie screenshots in `~/uk-shots/2026-09-16/na-*.png`).
 - **P1-53 · ✅ afgerond 2026-09-16 (Claude, in de builder).** `thuisBezorgen`
   AppBar stond op `backgroundColor: info`; nu **Primary Text** (leisteen), gelijk
   aan de rest. Export-geverifieerd: 0× `.info`, 1× `.primaryText`.
-- **P1-54 · `EvenementInfo`: adresregels met iconen · Eigenaar: Claude — bezig (sessie 2026-09-16 avond, nameten + bouwen)
-  (toegewezen door Bob, 2026-09-16: "zet klaar als taak voor volgende keer").**
-  Op `EventCurrent` staan adres en plaats als kale tekst, en "Plaats" springt in
-  omdat er een lege `Column` vóór staat (`evenement_info_widget.dart` r.~126-160).
-  Doel: dezelfde opbouw als de kaarten — `Row` met speldje-icoon + "adres,
-  plaats" op één regel, en de datum een kalender-icoon. Rechtsklik `TextAdres` →
-  Wrap Widget → Row, dan Insert Widget → Icon vooraan (landt op positie 0).
+- **P1-54 · ✅ gebouwd 2026-09-17 (Claude, in de builder), export-geverifieerd,
+  `dart analyze` 0 errors.** `EvenementInfo`: adres en plaats staan nu op één
+  regel als `Row` met `Icons.location_on_sharp` (20 px, `primaryText`, padding
+  rechts 4) + één `Text` via **Combine Text** (`adres`, ", ", `plaats`) in een
+  `Expanded`. De inspringing kwam niet door een lege Column maar doordat de
+  twee losse Texts in een Column standaard gecentreerd stonden. `EventCurrent`:
+  de datum (`TextData`) zit in een `Row` met `Icons.calendar_month` (20 px,
+  padding 8/4) ervoor. De `GoogleMapsIconButton` (speld, opent de kaart) staat
+  ongewijzigd onder "Website". *Restpuntje, cosmetisch:* de Visibility-conditie
+  `$[0].datum is set` staat op de Text, niet op de Row — bij een event zonder
+  datum blijft het kalender-icoon alleen staan. Op het toestel nagekeken: zie
+  de sessienotitie hieronder.
 - **P1-17 Deel A · laatste 3 regels · ✅ AF 2026-09-16 (Claude, builder +
   verse export).** `hnnqfnhk` "Eatings" → **Restaurants** en `ykjsgvsf`
   "Overnight" → **Accommodation** zijn gezet. De derde (`qqb1howd`) bleek niet
@@ -635,17 +646,39 @@ telefoon-emulator bekeken (zie screenshots in `~/uk-shots/2026-09-16/na-*.png`).
   Export-geverifieerd (geen `Align(` meer rond de labels, `List.generate`
   intact), `dart analyze` 0 errors, op de telefoon-emulator nagekeken
   (`~/uk-shots/2026-09-16/na3-horeca-ovz.png`).
-- **P2-35 · `HorecagelegenheidCurrent`: "Geen evenementen"-strook · Eigenaar: Claude — bezig (sessie 2026-09-16 avond, eerst nameten) —
-  Claude — eerst NAMETEN op een toestel vóór je gaat bouwen.** De
-  oorspronkelijke bevinding was "staat permanent onderin, ook als de zaak events
-  heeft". In de export van 2026-09-16 klopt dat maar half: de events-tabel
-  (`HorecagelegenheidEventTabelComponentCopy`) doet al keurig
-  `if (evenementen.isEmpty) return GeenEvenementenComponentWidget();` — dat is
-  correct empty-state-gedrag. Wat er wél permanent staat is de **knop "Alle
-  horecagelegenheden"** (`horecagelegenheid_current_widget.dart` r.~1610), los
-  van de tab waar je op staat. Kijk dus eerst op de emulator wat de gebruiker
-  echt ziet vóór je een Visibility-conditie bouwt; mogelijk is de hele taak
-  alleen nog "die knop in de Agenda-tab zetten".
+- **P2-35 · ✅ grotendeels gebouwd 2026-09-17 (Claude, in de builder),
+  export-geverifieerd, `dart analyze` 0 errors — één restpunt voor Bob.**
+  Nameting op de telefoon-emulator (screenshots
+  `~/uk-shots/2026-09-16/p235-*.png`): de body van `HorecagelegenheidCurrent`
+  had twee `Expanded`-blokken onder elkaar (tabs + evenemententabel, 50/50), dus
+  de evenementen stonden op élke tab en de tab-inhoud kreeg maar ~100 dp (logo
+  op Info afgekapt). Nu: **vierde tab "Agenda"** (EN "Agenda", sleutel
+  `jwojezxv`) met daarin één instantie van
+  **`HorecagelegenheidEventTabelComponentCurrent`** (hernoemd van `...Copy`,
+  Bob's verzoek; `nid` + `horecaid` → page-parameter `nid`); het losse
+  `Expanded > Container(height 100)`-blok is weg. De knop "Alle
+  horecagelegenheden" staat nog onderaan de pagina.
+  ⚠️ **Op het toestel is de Agenda-tab bij een zaak MÉT events LEEG, en dat komt
+  niet door de tab maar door een gelijktijdige wijziging aan het component
+  zelf** (bestand gewijzigd 00:17 door een andere sessie/Bob, ná mijn eerste
+  export van 23:30): de `GridView` in `HorecagelegenheidEventTabelComponentCurrent`
+  is vervangen door een `StaggeredView`, en de Responsive Value voor
+  `Cross Axis Count` heeft **alle vier de takken leeg** → `return 0;` ×4 →
+  `Bad state: No element` in `RenderSliverMasonryGrid.performLayout` (logcat,
+  profile-build). Zie het CLAUDE.md-recept: alle vier vullen (1/1/2/3), en
+  Shrink Wrap uit. Zolang dat niet is gedaan toont de tab niets; de
+  empty-state (0 events) werkt wél. Niet zelf aangeraakt — iemand anders zat
+  erop.
+  *Klein:* met vier tabs kapt "Bezorgen" af op 411 dp → `TabBar` →
+  "Tab Bar Scrollable" aan.
+  **Restpunt · Eigenaar: Bob — Agenda staat als 4e tab, niet als 1e.** Tabs
+  herordenen lukt niet via de widget tree: een `Tab`-node op de `TabBar`-rij
+  droppen geeft de toast *"Tab can only be added to TabBar"*, en op een andere
+  Tab-rij droppen verplaatst alleen de Tab (niet zijn TabBar Page), waarna het
+  canvas breekt (met Undo hersteld). Inhoud tussen TabBar Pages slepen landt
+  óók niet (3× getest). Opties: (a) jij probeert het slepen in je eigen browser;
+  (b) `TabBar` → *Initial Tab Index* op 3 zodat de pagina op Agenda opent
+  (export kent `initialIndex`); (c) Agenda gewoon als 4e tab laten.
 - **P2-36 · ❌ NEE — besluit Bob 2026-09-16: kaarttitels blijven Roboto.**
   Niet opnieuw voorstellen. (Voorstel was Title Large/Medium op Noto Serif zetten
   omdat de site kaarttitels in serif zet; Headline L/M/S staan al wel op serif.)
@@ -766,7 +799,8 @@ daarmee niet meer geblokkeerd en heeft nu een kant-en-klaar werkblad
    paneel. Verder zitten veel vertaalsleutels op **Tooltip-nodes** (`Terug`,
    `Veld wissen`, `Wachtwoord tonen/verbergen`) in plaats van op zichtbare
    labels; die vind je alleen door in de widget tree op `Tooltip` te zoeken.
-4. **Builder-opruimronde.** P2-7 (21 dode eenheden; begin met
+4. **Builder-opruimronde — grotendeels ✅ 2026-09-16/17 (Bob), restant staat
+   onder "Bij livegang".** Oud: P2-7 (21 dode eenheden; begin met
    `drawer_component_copy` + `kanweghorecagelegenheid_current_copy`),
    `HorecagelegenhedenOverzichtCopy3Copy`, `homeCopy` (het datumfilter is af en op een toestel getest, dus mag weg),
    en P2-22 (twee Property Override-fouten). Daarna één export + `dart analyze`
@@ -1270,20 +1304,6 @@ bovenrand, de kloktijd loopt er dwars doorheen.
   widget met `SafeArea`, maar dat is meer werk voor hetzelfde resultaat.
 - Verifiëren: `adb shell input tap 275 55` moet daarna het menu openen.
 
-### 🆕 Favorieten — restpunt voor Bob (stand 2026-09-14 avond)
-
-*Chat-taken 1, 2 en 3 zijn afgerond en geverifieerd met een verse export:
-de knop op tab 4 staat op `secondary` + "Stadsactiviteit aanmaken", en het
-losse label "Stadseditor" op `stadsactiviteitAanmaken` heet nu "Of kies zelf
-een plaats" (restpunt 4 van 13 sep). `dart analyze` op die export: 0 errors.*
-
-**Eén punt open, Eigenaar: Bob** — losse tekst **"Hello World"** onderaan
-tab 1 (Persoonlijke agenda) van `Favorieten`, zichtbaar voor elke ingelogde
-gebruiker. In de builder: pagina `Favorieten` → `TabBarView` → **eerste
-`TabBar Page`** → `Column` → het **laatste kind**, een `Text` die als enige
-buiten de `Expanded` met de agendalijst hangt (i18n-sleutel `wmho8j7h`).
-Rechtsklik → Remove Widget. Claude verwijdert niets; zeg je wat er wél hoort
-te staan, dan vult Claude het in.
 
 ### ✅ Offline-crash op de provinciepagina — opgelost 2026-09-14 (avond)
 
@@ -1986,6 +2006,20 @@ en staat in de map `kanweg`. Drie dingen die daaruit volgen:
 
 ### Bij livegang
 
+- **Builder-opruimronde P2-7, restant (Bob, 2026-09-17: "zet de rest bij
+  livegang").** Nog in de export van 2026-09-17 00:10: componenten
+  `SliderUitgaanComponentSmallCurrent` en
+  `PUitgaantabelKaartComponentOrgineelMetKaartjeerin`; pagina's
+  `KanwegTestUpload` en `Event` (die laatste weigert structureel, laten
+  staan); custom function `dISABLEdatumVoorApi` (hernoemd, nog steeds dood).
+  Weg zijn sinds 2026-09-16/17: `drawerComponentCopy`,
+  `kanweghorecagelegenheidCurrentCopy`, `KanwegHorecagelegenhedenOverzicht`,
+  `KanwegHomeCopy`, `HeaderButtonsComponentCopymethartje`, de drie
+  `KaartTabel/Slider`-comps, `KanwaegSelectStateDropDownComponentCopy`,
+  `KanwegHomeUitgaantabelKaartComponentCopy`, `KanwegHeaderButtonsComponentCopy`,
+  `FavorietenCopy`, `HorecagelegenhedenOverzichtCopy/Copy2/Copy2Copy`,
+  `Kanweg`, `KanwegHorecagelegenhedenOverzichtSortPage`. `dart analyze` op
+  die export: 0 errors.
 - **Taak 56 · Opruim-cron: description zegt 30 dagen, code doet 360 (Bob's
   besluit 2026-09-15: na livegang).** In
 `custom_cronapi()` staat *"after 30 days"*, in
@@ -2068,7 +2102,10 @@ maak description en code gelijk, en hernoem `$date_after_30`.
      op productie standaard uit staat en op devbob met één
      `drush vset custom_debug 1` weer aan kan. Geen debug-code weghalen die
      bij een storing op productie nog nuttig kan zijn — alleen uitzetten.
-  4. Nalopen dat er geen `print`/`var_dump`/`dd()` meer in staat die de
+  4. ✅ **Nagelopen 2026-09-17 (Bob, grep op productie):** alleen een
+     uitgecommentarieerde `print_r` (r.791) en een `print_r` binnen
+     `_custom_debug_watchdog` (r.1948, gaat via de debug-schakelaar). Niets
+     dat de JSON kan vervuilen. Oud: nalopen dat er geen `print`/`var_dump`/`dd()` meer in staat die de
      JSON-respons kan vervuilen (de app parst de body strikt; één regel
      ervoor breekt `getJsonField`).
   5. Deploy naar productie, Drupal-cache legen, en met een cache-buster