瀏覽代碼

P2-21 afgerond (sliderband responsief), P2-22 aangescherpt

P2-21 punt 5: viewportFraction op HomeUitgaanSliderComponent en
PUitgaanSliderComponent is nu een Responsive Value 0.75/0.75/0.5/0.35
i.p.v. een vaste 0.75. Geverifieerd met verse export + dart analyze
(0 errors). Daarmee zijn alle 5 punten klaar en is de taak verwijderd;
het breekpunt-huispatroon staat nu in CLAUDE.md.

P2-22: de Visibility-Conditional op DropDownGemeenten-mijngemeenten is
als oorzaak uitgesloten (uitgezet -> fout bleef staan). Enige resterende
kandidaat is een van de twee Options-bindingen. Let op: de conditie
staat nu op Unset en moet nog teruggezet worden.

CLAUDE.md: een Visibility-Conditional uitzetten wist de conditie.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 1 周之前
父節點
當前提交
34d73bf833
共有 2 個文件被更改,包括 59 次插入60 次删除
  1. 28 0
      CLAUDE.md
  2. 31 60
      TASKS.md

+ 28 - 0
CLAUDE.md

@@ -761,6 +761,18 @@ volledige, haakjes-sluitende `Read` van het component), niet op basis
 van een korte code-`grep`/fragment-inferentie — bij twijfel eerst om een
 screenshot vragen i.p.v. te gokken.
 
+**⚠️ De Visibility → Conditional-toggle UITZETTEN wist de conditie —
+weer aanzetten geeft een lege conditie (`Unset` in rood), geen herstel.**
+Bevestigd 2026-09-03 (`DropDownGemeenten-mijngemeenten` op
+`stadsactiviteitAanmaken`, tijdens P2-22-onderzoek). De toggle is dus geen
+aan/uit-schakelaar waarmee je even iets kunt uitproberen: uitzetten is
+destructief voor de conditie zelf. **Noteer de conditie vóór je 'm
+uitzet** (bron + JSON Path + operator), want je moet 'm daarna volledig
+opnieuw opbouwen via de Set-from-Variable-dialoog. Een aangezette
+conditional zónder conditie genereert bovendien géén guard in de export —
+de widget is dan gewoon altijd zichtbaar, zonder dat de builder daar
+duidelijk over is.
+
 **Conditioneel tonen/verbergen: gebruik de ingebouwde "Visibility"-sectie
 op het widget's eigen properties-paneel, niet Wrap Widget.** Elk widget
 heeft rechtsboven in zijn eigen properties-paneel een **"Visibility"**-
@@ -1535,6 +1547,22 @@ op een wegwerp-duplicaat):
   variabele hoogtes aankan. Dat is ook het patroon dat op
   `HorecagelegenhedenOverzicht` al draait.
 
+**Breekpunten en het huispatroon voor responsieve waarden.** De
+constanten staan in `lib/flutter_flow/flutter_flow_util.dart`:
+`kBreakpointSmall` 479, `kBreakpointMedium` 767, `kBreakpointLarge` 991
+(logische px). Elke Responsive Value heeft dus **vier** takken. Het
+patroon dat in dit project overal is doorgevoerd:
+- **kolommen (`Cross Axis Count`): 1 / 1 / 2 / 3** — horeca-overzicht,
+  Home (alle 5 tabs via `HomeUitgaantabelKaartComponent`) en Favorieten.
+- **Carousel `viewportFraction`: 0.75 / 0.75 / 0.5 / 0.35** —
+  `HomeUitgaanSliderComponent` en `PUitgaanSliderComponent` (2026-09-03).
+  Zonder dit werd de sliderkaart op een 1280 dp tablet 960 dp breed, met
+  een brede grijze band eromheen.
+Merk op dat beide de eerste waarde herhalen: de twee smalste banden zijn
+allebei "telefoon" en verdienen zelden verschillende behandeling. Ter
+referentie: telefoon = 411 dp, tablet staand = 800 dp, tablet liggend =
+1280 dp.
+
 **Responsieve kolommen zetten: `Cross Axis Count` → icoontje naast het
 label → Source "Responsive Value".** Dat bouwt zelf de vier
 breekpunt-takken (`< kBreakpointSmall` / `< Medium` / `< Large` /

+ 31 - 60
TASKS.md

@@ -2099,12 +2099,6 @@ De horeca-overzichtskaart uit P1-36 gebruikt dit gedeelde component
 **niet** (die had een eigen inline groene Container), dus die is met de
 fix van 2026-09-03 al klaar en verandert hier niet door mee.
 
-**Los administratief punt (2026-09-03):** `P2-21` verwijst twee keer naar
-**`P1-38`** ("punt 5 wacht op P1-38"), maar er bestaat geen P1-38-blok
-meer in dit bestand — die taak is ooit afgevoerd zonder de verwijzing bij
-te werken. Bob: of P2-21 punt 5 is nu gewoon vrij om op te pakken, of de
-verwijzing moet naar de juiste taak wijzen.
-
 ## P2 — features & concept, na livegang
 
 **P2-1 · Eigenaar: Bob — testen in de API, komt terug.** Datum-filter:
@@ -2428,9 +2422,10 @@ liggen tot Bob erop terugkomt — geen eigen taak-ID.)*
   `lib/kanweg/kanweg_home_copy/`, klasse `KanwegHomeCopyWidget`.
   Rename én move gingen zonder de "Invalid Action"-blokkade die de
   Event-pagina destijds gaf; bevestigd via verse export.
-  **`HomeUitgaantabelKaartComponentCopy` bewaren zolang P2-21
-  openstaat** (herstelpunt als de pagination-omzetting misgaat);
-  daarna ook naar `kanweg`.
+  **`HomeUitgaantabelKaartComponentCopy` mag nu weg** — het was het
+  herstelpunt voor de pagination-omzetting van P2-21, en die taak is op
+  2026-09-03 volledig afgerond en visueel geverifieerd. Zelfde behandeling
+  als `homeCopy`: hernoemen met `kanweg`-prefix en naar de map `kanweg`.
 - **Nieuw bevestigd dood (2026-08-31, Claude, code-only; geverifieerd
   met `grep -rn "components/<bestand>" lib/` — 0 importeurs):**
   `lib/components/uitgaantabel_kaart_widget.dart` +
@@ -3714,7 +3709,33 @@ knop weggooien en opnieuw opbouwen sneller.
 - `DropDownGemeenten-mijngemeenten` → "Invalid API call configuration"
 - `DropDownProvincie` → "return type mismatch"
 
-*Al uitgesloten (2026-09-01, Claude):* de API-calls zelf zijn in orde
+*Al uitgesloten (2026-09-03, Claude — `DropDownGemeenten-mijngemeenten`):*
+de **Visibility → Conditional is NIET de oorzaak.** Bob heeft hem uitgezet
+(geverifieerd: de `if (getJsonField(..., r'$[0].titel') != null)` verdween
+uit de export) en de teller bleef gewoon op 2 staan, met de fout die nog
+steeds naar diezelfde dropdown springt. Ook uitgesloten: het widget heeft
+**geen eigen Backend Query** ("Add Query"-knop), en de query op de
+omhullende `Column` is correct geconfigureerd (`MijnStadsrechten`,
+`session_name` → App State `userSessionname`, `sessid` → `userSessionid`).
+De conditie zelf was ook gezond: bron **MijnStadsrechten Response** →
+JSON Body → JSON Path `$[0].titel`, met tooltip "From Column Call".
+**Wat overblijft als enige kandidaat:** één van de twee Options-bindingen,
+**Define Options Values** (`$[:].tid`) of **Define Options Labels**
+(`$[:].titel`). Aanpak: die binding niet opnieuw *bevestigen* (dat schrijft
+dezelfde waarde terug en hielp al niet) maar met het reset-icoontje
+**leeggooien** en opnieuw opbouwen.
+
+⚠️ **Valkuil, 2026-09-03 aan den lijve ondervonden: een Visibility →
+Conditional uitzetten WIST de conditie.** Weer aanzetten levert een lege
+conditie op (`Unset` in rood) en dus géén guard. Zet je 'm uit om iets te
+testen, noteer dan eerst de conditie — je moet hem daarna volledig
+opnieuw opbouwen. **Stand bij het afsluiten van sessie 2026-09-03: de
+conditie op `DropDownGemeenten-mijngemeenten` staat nog op `Unset`** (Bob
+heeft 'm geprobeerd terug te zetten, maar drie verse exports op rij tonen
+de `if` niet terug). Terugzetten: First Value → MijnStadsrechten Response
+→ JSON Body → JSON Path `$[0].titel` → operator `Is Set`.
+
+*Eerder al uitgesloten (2026-09-01, Claude):* de API-calls zelf zijn in orde
 (`MijnStadsrechten` en `provincies`: absolute URL, GET, variabelen en
 headers correct); de Backend Query op `DropDownProvincie` staat gewoon
 op `provincies`; en het opnieuw bevestigen van zowel "Define Options
@@ -3755,56 +3776,6 @@ kaarttitels op afbreken/overlopen nakijken. Ook een legitieme uitkomst:
 niet doen — dan is de app herkenbaar op kleur maar mist hij de
 kranten-uitstraling.
 
-**P2-21 · Eigenaar: Claude — bezig (sessie 2026-09-03, punt 5 sliderband). Punten 1 t/m 4 zijn op 2026-09-01/02
-AFGEROND en met verse export geverifieerd. Alleen punt 5 (sliderband)
-staat nog open, en dat wacht op P1-38.** Tabletweergave herschikken
-i.p.v. uitrekken.
-
-**Breekpunten** staan in `lib/flutter_flow/flutter_flow_util.dart`:
-`kBreakpointSmall` 479, `kBreakpointMedium` 767, `kBreakpointLarge` 991
-(logische px). Telefoon-referentie 411x731 dp. Het overal toegepaste
-patroon is **1 / 1 / 2 / 3** kolommen. **Let op: welke emulator de tablet
-is wisselt** — op 2026-09-03 was `emulator-5554` de tablet (2560x1600 @
-320dpi = 1280x800 dp) en `emulator-5556` de telefoon. Altijd eerst
-`adb -s <device> shell wm size` draaien.
-
-**Afgerond:**
-1. Horeca-overzicht (gemeente én provincie) — was al goed; dit was het
-   na te volgen patroon.
-2/3. **Home** — het `PagedListView` in `HomeUitgaantabelKaartComponent`
-   is omgezet naar een `PagedMasonryGridView` met responsieve
-   `crossAxisCount`. Eén wijziging raakt alle 5 de Home-tabs. Alle
-   pagination-instellingen zijn intact gebleven/hersteld: infinite
-   scroll (`page: nextPageMarker.nextPageNumber`), pull-to-refresh
-   (`RefreshIndicator` + `waitForOnePageForStaggeredView()`) en beide
-   `SpinKitFadingCircle`-laadindicatoren.
-4. **Favorieten** — beide `crossAxisCount: 2` (tab 1 en tab 2) staan nu
-   op dezelfde responsieve uitdrukking.
-
-**Nog open — punt 5, pas ná P1-38.** `viewportFraction: 0.75`
-(`home_uitgaan_slider_component_widget.dart:287` en
-`p_uitgaan_slider_component_widget.dart:280`) geeft op 1280 dp een kaart
-van 960 dp breed. Verdient dezelfde breekpunt-behandeling
-(bv. 0.75 / 0.5 / 0.35).
-
-**Visueel narekenen: AFGEROND (2026-09-03, Claude, profile-build op de
-tablet-emulator).** Alle drie de formaten kloppen met het ontwerp, op
-Home (`HomeUitgaantabelKaartComponent`, raakt alle 5 de tabs):
-- liggend, 1280 dp → **3 kolommen** ✓
-- staand, 800 dp (`wm size 1600x2560`) → **2 kolommen** ✓
-- telefoonformaat, 411 dp (`wm size 1080x2160` + `wm density 420`) →
-  **1 kolom** ✓ — daarna `wm size reset` / `wm density reset`.
-Geen overflow, geen leeg vlak, kaarten vullen de breedte netjes.
-**Wat het oog wél bevestigt is punt 5 hieronder:** de sliderband bovenaan
-is op tablet echt storend — één kaart van ~960 dp met een brede grijze
-band eromheen, plus een half afgesneden lege kaart links en rechts. Dat
-is nu het meest zichtbare tabletprobleem dat er nog ligt.
-
-**Het recept om de pagination-blokkade te omzeilen staat nu in
-`CLAUDE.md`** (Replace weigert bij pagination; infinite scroll uit, `page`
-verwijderen, Replace, daarna `page` → Next Page Index terugzetten),
-samen met de valkuil van de te hoge Set-from-Variable-dialoog.
-
 ---