Переглянути джерело

P2-6: werkend pad gevonden — herbouwen van de pagina is niet nodig

Drie extra tests op HorecagelegenhedenOverzichtCopy, nadat Bob bevestigde
dat de ConditionalBuilder-tabs ook bij hem weigeren:

- Wrap Widget -> Column op de ConditionalBuilder: geweigerd (Invalid
  Action). Die route is dicht.
- Insertie in de ROOT-Column van de pagina (die de Container met de
  TabBar bevat): werkt. Export bevestigt Scaffold > Column > [Container,
  nieuw widget], 6 tabs en 6 kaartbindingen intact, 0 verwijderde regels.
- Een eigenschap wijzigen van een widget BINNEN een ConditionalBuilder-
  tab: werkt (mainAxisSpacing 12 -> 13 op tab 1, exportgeverifieerd).

De blokkade geldt dus alleen voor het toevoegen/herstructureren van
widgets in zo'n tak, niet voor bindings en acties. Daarmee kan stap 3 als
één zoekveld boven de TabBar (zoals oorspronkelijk gepland) en zijn stap
4 en 6 puur binding-werk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 1 тиждень тому
батько
коміт
5ada7aad39
1 змінених файлів з 80 додано та 39 видалено
  1. 80 39
      TASKS.md

+ 80 - 39
TASKS.md

@@ -1137,15 +1137,12 @@ gelegenheden mét evenementen was élk bezorgveld leeg — dat waren
 poppodia en cafés, dus geen representatieve steekproef, maar het maakt
 wel de vraag scherp of dit een handvol zaken betreft of honderden.
 
-**P1-6 restpunt (2026-09-04):** de drie Bezorgen-tab-velden van Minor-2
+*(P1-6 restpunt vervallen 2026-09-04 — Bob. De drie Bezorgen-tab-velden
 kregen bij het binden automatisch een Default Variable Value met de
-**veldnaam** erin — `valueOrDefault<String>(..., 'afhaalopties')`,
-`'betaalopties'` en `'bezorgdin'` (die laatste nog met een d, terwijl het
-veld `bezorgtin` heet). De `!= null`-guard ervoor vangt het normale geval
-af, dus dit slaat alleen toe bij een lege array `[]` i.p.v. `null` — in
-een steekproef van 59 zaken nooit voorgekomen. Cosmetisch, laag risico:
-Default Variable Value leegmaken op die drie widgets in
-`horecagelegenheid_current_widget.dart` (regels ~1164, ~1384, ~1423).
+veldnaam erin (`valueOrDefault<String>(..., 'afhaalopties')` e.d.), maar
+het veld is in de builder niet leeg te maken én de tekst bereikt de
+gebruiker nooit: de `!= null`-conditie ervoor blokkeert de widget al bij
+lege data. Geen actie nodig.)*
 
 *(P1-6 grotendeels afgerond 2026-08-16 t/m 2026-08-18 — letterlijke
 veldnaam i.p.v. nette placeholder bij ontbrekende data
@@ -2289,6 +2286,48 @@ gedaan, zie het kader hieronder; stappen 3/4/6 staan nog open).
 > dus bevestigd "lukt Claude niet via automation", **niet** bewezen "kan
 > in FlutterFlow niet". In Bob's eigen browser is het het proberen waard.
 >
+> **VERVOLG DEZELFDE SESSIE — er is een werkend pad gevonden, herbouwen
+> is NIET nodig.** Nadat Bob bevestigde dat de ConditionalBuilder-tabs
+> ook in zijn eigen browser weigeren, zijn er nog drie dingen getest op
+> dezelfde kopie:
+> 1. **`Wrap Widget` → `Column` op de `ConditionalBuilder`: geweigerd**
+>    met "Invalid Action ... we've undone it for you". Die route is dus
+>    dicht, net als insertie in de If-tak.
+> 2. **Insertie in de ROOT-`Column` van de pagina (die de `Container`
+>    met de `TabBar` bevat): WERKT.** Een widget landt daar netjes als
+>    tweede kind, en de export bevestigt het: `Scaffold > Column > [
+>    Container(TabBar), <nieuw widget> ]`, alle 6 tabs en 6
+>    kaartbindingen intact, **0 verwijderde regels** in de diff. Insert
+>    Widget voegt achteraan toe; naar bóven de TabBar krijg je 'm door de
+>    node in de tree op de `Column`-rij te droppen (drop = positie 0).
+> 3. **Een eigenschap wijzigen ván een widget bínnen een
+>    ConditionalBuilder-tab: WERKT.** `Main Axis Spacing` van de
+>    `StaggeredView` in tab 1 (Cultuur) van 12 naar 13 gezet;
+>    exportgeverifieerd (`mainAxisSpacing: 13.0` op alleen die ene, de
+>    andere vijf nog 12). De blokkade geldt dus **uitsluitend voor het
+>    toevoegen/herstructureren van widgets** in zo'n tak, niet voor
+>    bindings, waarden of acties.
+>
+> **Gevolg voor het bouwplan:** stap 3 hoort niet per tab maar als
+> **één zoekveld (+ categoriefilter) in de root-`Column` boven de
+> `TabBar`** — precies wat de oorspronkelijke stap 3 hierboven al
+> voorschreef ("Eén TextField boven de TabBar die de op dat moment
+> actieve tab filtert"). Stap 4 en 6 zijn puur binding-werk op de
+> bestaande `StaggeredView`s en zijn dus gewoon uitvoerbaar. De
+> 6x `zoektermXxx`/`categorieFilterXxx`-page-state is daarmee
+> overgedimensioneerd: met één gedeeld veld is één set genoeg, de rest
+> kan blijven staan en ongebruikt blijven.
+>
+> **Nog niet geverifieerd:** dat de root-`Column`-insertie ook op de
+> **live** pagina lukt. De kopie erfde de ConditionalBuilder-blokkade,
+> dus ze gedragen zich vermoedelijk hetzelfde — maar test het daar
+> opnieuw vóór je op het goede pad vertrouwt.
+>
+> **Sporen van de test op de kopie** (blijven staan, Claude verwijdert
+> niets): een losse `TextField` onderaan tab 0, een `Text` "Hello World"
+> onderaan de root-`Column`, en `mainAxisSpacing: 13` i.p.v. 12 op de
+> `StaggeredView` van tab 1.
+
 > **Praktisch gevolg voor stap 3/4/6:** op deze pagina is **alleen tab 0
 > een kale `Column`**; tabs 1 t/m 5 zitten allemaal in een
 > `ConditionalBuilder`. Claude kan het zoekveld dus wel op tab 0
@@ -3831,15 +3870,19 @@ laten alleen de eerste landen.
 
 ---
 
-**P2-16 · Eigenaar: Bob** (klein). Tabnamen gelijktrekken met de site.
-Home: app heeft Uitgaan/Activiteiten/Cultuur/Films/Jeugd, site heeft
-Uitgaan/Stadsactiviteiten/Cultuur&Info → "Activiteiten" wordt
-"Stadsactiviteiten", "Cultuur" wordt "Cultuur&Info" (Films en Jeugd
-mogen blijven; de app mag fijnmaziger zijn, zolang gedeelde namen
-kloppen). Gelegenheiddetail: app heeft Info/Links/Bezorgen, site heeft
-Info/Opening/Map → openingstijden en kaart terug als eigen tab, "Links"
-onder Info. Let op: `evenement_horecagelegenheid` noemt dezelfde tab al
-wél "Openingstijden" — die twee schermen spreken elkaar nu tegen.
+*(P2-16 afgerond 2026-09-04 — Bob, builder. Home-tab "Cultuur" heet nu
+**"Cultuur & Info"**, gelijk aan de site. **Bewuste afwijking van het
+oorspronkelijke voorstel:** "Activiteiten" wordt **niet** hernoemd naar
+"Stadsactiviteiten" — Bob houdt het op Activiteiten. Films en Jeugd
+blijven ook ongewijzigd; de app mag fijnmaziger zijn dan de site.
+De tweede helft (gelegenheiddetail `Info/Links/Bezorgen` tegenover de
+site's `Info/Opening/Map`) is niet opgepakt en staat hieronder los.)*
+
+**P2-16b · Eigenaar: Bob** (rest van P2-16). Op de gelegenheiddetail
+heeft de app `Info / Links / Bezorgen`, de site `Info / Opening / Map`.
+Openingstijden en kaart verdienen een eigen tab, Links kan onder Info.
+Let op: `evenement_horecagelegenheid` noemt dezelfde tab al wél
+"Openingstijden" — die twee schermen spreken elkaar nu tegen.
 
 **P2-22 · Eigenaar: Bob (P2-15-werk; blokkeert de export NIET).**
 Vier openstaande fouten in het Issues-paneel, stand 2026-09-03. Geen
@@ -3906,28 +3949,26 @@ vervallen: Bob heeft `stadsactiviteitAanmakenCopy` en
 compilefouten uit het oude P2-23 verdwenen — die taak is geschrapt.)*
 
 
-**P2-18 · Eigenaar: Claude** (mechanisch, klein). Menu-iconen
-gelijktrekken tussen het Gemeente- en het Provincie-blok in
-`drawer_component_widget.dart`. **Geïnventariseerd 2026-09-04 — het zijn
-3 verschillen, niet 2:**
-
-| Categorie | Gemeente-blok | Provincie-blok |
-|---|---|---|
-| Uitgaan | `music_note_outlined` | `music_note_outlined` ✅ |
-| Activiteiten | `flagCheckered` | `sports_score` ❌ |
-| Cultuur | `article_sharp` | **`piedPiperAlt`** ❌ |
-| Films | `movie_outlined` | `movie_outlined` ✅ |
-| Jeugd | `emoji_people` | `child` ❌ |
-| Horeca | `restaurant_sharp` | `restaurant_sharp` ✅ |
-
-`Icons.piedPiperAlt` is het Pied Piper-logo (FontAwesome, uit de serie
-Silicon Valley) — dat is los van consistentie gewoon fout en het meest
-urgente van de drie. Merk op dat `flagCheckered`, `piedPiperAlt` en
-`child` FontAwesome-namen zijn, de rest Material.
-
-**Stond eerder geparkeerd tot na P0-11** ("vervalt grotendeels als de
-twee lijsten samengevoegd worden") — die samenvoeging is 2026-09-04 door
-Bob afgewezen, dus deze taak blijft volledig staan.
+**P2-18 · Eigenaar: Bob — grotendeels afgehandeld 2026-09-04, 2 punten
+open (Bob: "zo houd ik het" — alleen oppakken als hij erop terugkomt).**
+Menu-iconen in `drawer_component_widget.dart`, Gemeente- tegenover
+Provincie-blok. Stand na Bob's ronde, geverifieerd via verse export:
+
+| Categorie | Gemeente | Provincie | |
+|---|---|---|---|
+| Uitgaan | `music_note_outlined` | `music_note_outlined` | ✅ |
+| Activiteiten | `flagCheckered` | `sports_score` | ❌ nog verschillend |
+| Cultuur | `piedPiperAlt` | `piedPiperAlt` | ⚠️ gelijk, maar zie hieronder |
+| Films | `movie_outlined` | `movie_outlined` | ✅ |
+| Jeugd | `emoji_people` | `emoji_people` | ✅ |
+| Horeca | `restaurant_sharp` | `restaurant_sharp` | ✅ |
+
+⚠️ **Bij Cultuur heeft de verkeerde kant gewonnen:** `article_sharp`
+(krant) is vervangen door **`piedPiperAlt`**, het bedrijfslogo van Pied
+Piper uit de HBO-serie *Silicon Valley* (een FontAwesome-merkicoon). Dat
+staat nu dus op **beide** plekken in plaats van nergens. Terugzetten is
+één swatch: `article_sharp` past bij "Cultuur & Info" én bij het
+krantenmerk. Bob is hierop gewezen en houdt het voorlopig zo.
 
 **P2-19 · Eigenaar: Bob.** `nav.dart`:129 stuurt een ingelogde
 gebruiker naar het provincie/gemeente-keuzescherm en een uitgelogde