소스 검색

P2-6 onderzoeksstap 1 (code-only): regressie P1-31 gevonden op live horeca-overzichtpagina

- Verse export + dart analyze: 0 errors, dus geen code-niveau
  inconsistentie op HorecagelegenhedenOverzicht — de builder-bug van
  2026-08-25 is puur UI-side.
- Nieuw: P1-31 — tab "Eetgelegenheden" is zijn Generate Dynamic
  Children kwijt (itemCount: 1, parameterloze kaart). Exact
  herstelrecept afgeleid uit de intacte kopie ...Copy2.
- P2-6 restpunt (Activiteiten/tab 0 via On Page Load) blijkt al
  gebouwd; volledige Page-State-laag staat klaar; provincie-variant
  nog volledig onaangeraakt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 2 주 전
부모
커밋
b127fd1e9e
1개의 변경된 파일115개의 추가작업 그리고 19개의 파일을 삭제
  1. 115 19
      TASKS.md

+ 115 - 19
TASKS.md

@@ -1,5 +1,30 @@
 # Uitgaanskrant — takenlijst
 # Uitgaanskrant — takenlijst
 
 
+**Deze sessie (2026-08-30, zelfstandig, code-only — géén browser-
+tabgroep aanwezig bij sessiestart, dus aangenomen dat Bob niet actief
+achter zijn scherm zat en geen builder-UI geprobeerd):** P2-6's
+onderzoeksstap 1 uitgevoerd op een verse `flutterflow export-code`.
+**Belangrijkste uitkomst: een regressie op een live pagina gevonden** —
+`HorecagelegenhedenOverzicht`'s tab "Eetgelegenheden" is zijn
+lijst-generatie kwijt (1 leeg kaartje i.p.v. de lijst), de schade van
+Bob's `TextField`-experiment van 2026-08-25 staat nog steeds in de live
+builder-staat. Opgevoerd als **P1-31** mét exact herstelrecept,
+afgeleid uit de intacte kopie `HorecagelegenhedenOverzichtCopy2`.
+Verder: `dart analyze` op de verse export geeft **0 errors** (dus geen
+dieperliggende code-inconsistentie op die pagina — de builder-bug is
+puur UI-side), P2-6's laatste stap-2-restpunt (Activiteiten/tab 0 via
+On Page Load) blijkt intussen al gebouwd, en de complete Page-State-laag
+(6x `alleXxx`/`zoektermXxx`/`categorieFilterXxx`) staat klaar.
+**Let op voor de volgende sessie:** de lokale werkkopie liep bij
+sessiestart achter op de builder (o.a. `fetch_alle_horecagelegenheden.dart`
+ontbrak lokaal) én had een grote ongecommitte diff staan van een
+eerdere sessie (Firebase/`mijn_profiel`/`stadsactiviteit_aanmaken`, dus
+P1-16/P2-15-werk) — bewust niet overheen gecommit zonder navraag, zie
+de concurrency-regel in `CLAUDE.md`. Een verse `ff-run-fvm.sh ... -s`
+(of gewoon een export + commit) ruimt dat in één keer op.
+
+---
+
 **Vervolg dezelfde sessie (2026-08-25):** na afronding van P1-7 is de
 **Vervolg dezelfde sessie (2026-08-25):** na afronding van P1-7 is de
 volledige lijst herscand op zoek naar nieuw zelfstandig oppakbaar werk
 volledige lijst herscand op zoek naar nieuw zelfstandig oppakbaar werk
 — bleek verder vrijwel alles óf al Bob's eigen taak, óf een
 — bleek verder vrijwel alles óf al Bob's eigen taak, óf een
@@ -1164,6 +1189,47 @@ bewust uitgelaten, zie P2-10). Bevestigd via verse export:
 in `pubspec.yaml`, Firebase-init in `main.dart`. Uit deze lijst
 in `pubspec.yaml`, Firebase-init in `main.dart`. Uit deze lijst
 verwijderd.)*
 verwijderd.)*
 
 
+**P1-31 · Eigenaar: Bob (builder; Claude kan het ook in een live
+pair-sessie doen). REGRESSIE OP EEN LIVE PAGINA — gevonden 2026-08-30
+(Claude, code-only, verse export).** Op `HorecagelegenhedenOverzicht`
+(`horecagelegenheden_overzicht_widget.dart`) is de tab
+**"Eetgelegenheden"** (tab-index 1, `horcat: '34'`) zijn
+lijst-generatie kwijt: de `MasonryGridView` staat nu op
+`itemCount: 1` met één hardgecodeerde, **parameterloze**
+`HorecagelegenheidoverzichtKaartWidget()` (regels ~765-800 in de verse
+export). De gebruiker ziet daar dus 1 leeg kaartje i.p.v. de lijst
+eetgelegenheden. De 5 andere tabs zijn intact
+(`itemCount: horecagelegenheden.length`).
+- **Oorzaak:** dit is precies de schade die Bob 2026-08-25 al beschreef
+  bij P2-6 ("een `TextField` toevoegen aan de `Column` binnen een
+  `TabBar Page` verving de complete bestaande inhoud") — het is dus
+  geen nieuw/onbekend probleem, maar het is **blijven staan in de live
+  builder-staat** en niet als losse taak genoteerd.
+- **Live impact bevestigd:** de pagina is bereikbaar via de drawer
+  (Gemeente → Horeca, `drawer_component_widget.dart:1173`) en vanaf de
+  horeca-detailpagina (`horecagelegenheid_current_widget.dart:1491`).
+- **Herstelrecept (exact, overgenomen uit de intacte kopie
+  `HorecagelegenhedenOverzichtCopy2`, zie P2-6):** selecteer de
+  `StaggeredView`/`MasonryGridView` in tab 1 → **Generate Dynamic
+  Children** (4e icoontje, zie `CLAUDE.md`) → Variable Name
+  `horecagelegenheden`, Value = de API-response van deze tab
+  (`HorecagelegenheidoverzichtCall`, `horcat: '34'`,
+  `townid: widget.plaats`) → Available Options **"No Further Changes"**.
+  Daarna op de `HorecagelegenheidoverzichtKaart` in die tab de 6
+  parameters opnieuw binden via JSON Path op het loop-item:
+  `titel` → `$.titel`, `logo` → `$.logo`, `nid` → `$.nid`,
+  `adres` → `$.adres`, `plaats` → `$.plaats`, en `categorie` →
+  `$.categorie` (dit laatste is een **List<String>**, niet een losse
+  String). De overige tabs hebben ook `.take(25)` op de lijst en een
+  `if (horecagelegenheden.isEmpty) return Image.asset('assets/images/logo800px.png');`
+  empty-state — neem die mee voor consistentie.
+- **Restpunt in dezelfde adem:** op deze pagina staan nu 3 losse
+  `TextFormField`-experimenten zonder enige binding — in tab 0, in tab 1
+  (de veroorzaker van bovenstaande schade) en één helemaal onderaan de
+  pagina, buiten de `TabBarView`. Ruim de overbodige twee op (of laat ze
+  staan tot P2-6 stap 3 ze alsnog gebruikt), maar in elk geval mag de
+  onderste (buiten de tabs) weg.
+
 **P1-30 · Eigenaar: Bob (Cloudflare/infra-niveau, geen Claude-taak).**
 **P1-30 · Eigenaar: Bob (Cloudflare/infra-niveau, geen Claude-taak).**
 API-misbruik beperken voor de publieke Drupal-backend. **Besproken
 API-misbruik beperken voor de publieke Drupal-backend. **Besproken
 2026-08-25 (chat, n.a.v. FlutterFlow's App Check-toggle):**
 2026-08-25 (chat, n.a.v. FlutterFlow's App Check-toggle):**
@@ -2201,14 +2267,13 @@ Uitgaan `17967`, Verhuur/catering `17968`) + `townid: widget!.plaats!`
 State-lijst (`alleCultuur`, `alleEetgelegenheden`, `alleOvernachten`,
 State-lijst (`alleCultuur`, `alleEetgelegenheden`, `alleOvernachten`,
 `alleUitgaan`, `alleVerhuurCatering`).
 `alleUitgaan`, `alleVerhuurCatering`).
 
 
-**Restpunt bij stap 2, nog open: Activiteiten (tab 0, de al-actieve
-eerste tab bij page-load) heeft nog geen data-fetch.** `onTap` vuurt
-nooit voor een al-actieve tab (zelfde bekende beperking als bij
-Favorieten Tab 1, zie `CLAUDE.md`) — dezelfde actie
-(`fetchAlleHorecagelegenheden` met `horcat: '17969'` → Page State
-`alleActiviteiten`) moet nog toegevoegd worden aan de Scaffold's **On
-Page Load**-trigger. Laagrisico (Actions-tab-wijziging, geen
-widget-insert), kan door Claude of Bob.
+*(Restpunt bij stap 2 — Activiteiten/tab 0 via On Page Load —
+**afgerond**, bevestigd 2026-08-30 via verse export: `initState()` van
+`horecagelegenheden_overzicht_widget.dart` roept nu
+`fetchAlleHorecagelegenheden('17969', widget!.plaats!, 'services_1')`
+aan en zet het resultaat in `_model.alleActiviteiten`. Alle 6 tabs
+hebben nu dus hun complete dataset. Wie dit gebouwd heeft is niet
+vastgelegd — vermoedelijk Bob na de sessie van 2026-08-25.)*
 
 
 **Stappen 3, 4, 6 (widget-wiring: TextField, categorie-filter, lijsten
 **Stappen 3, 4, 6 (widget-wiring: TextField, categorie-filter, lijsten
 herbinden) — geblokkeerd, overgedragen aan Claude voor een latere
 herbinden) — geblokkeerd, overgedragen aan Claude voor een latere
@@ -2240,17 +2305,48 @@ specifieke pagina, niet op een bedieningsfout:**
   probleemloos — het probleem zit specifiek bij **widgets toevoegen/
   probleemloos — het probleem zit specifiek bij **widgets toevoegen/
   herstructureren** in dit deel van de boom, niet bij logica/acties.
   herstructureren** in dit deel van de boom, niet bij logica/acties.
 
 
-**Voor de volgende sessie (Claude), in volgorde:**
-1. Eerst grondig uitzoeken wat er mis is met deze pagina vóór er
-   opnieuw geprobeerd wordt te bouwen — de "Column vervangt zijn
-   kinderen i.p.v. toe te voegen"-bevinding hierboven ruikt naar een
-   dieperliggende inconsistentie (mogelijk gerelateerd aan hoeveel er
-   deze sessie al aan deze pagina veranderd is: 6x een `onTap`-actie
-   toegevoegd, `page`-parameter elders). Eén voorzichtige eerste stap:
-   een verse `flutterflow export-code` + `flutter analyze` op deze
-   pagina om te checken of er al een onderliggende inconsistentie
-   zichtbaar is, vóórdat er weer builder-UI-acties op los gelaten
-   worden.
+**Stap 1 van het vervolgplan (onderzoek) is uitgevoerd — 2026-08-30,
+Claude, code-only op een verse `flutterflow export-code`. Uitkomst:**
+- **Geen Dart-niveau-inconsistentie.** `dart analyze lib` op de verse
+  export: **0 errors** (939 warnings + 1156 infos, allemaal de
+  gebruikelijke FlutterFlow-lintruis: unused imports, `?..` op
+  non-nullables e.d.). De "Column vervangt zijn kinderen"-bug is dus
+  puur builder-side; de geëxporteerde code compileert prima. De
+  bekende dode-code-compilefout uit P2-7
+  (`slider_uitgaan_component_small_current`, `carouselResponse`) is
+  intussen ook verdwenen uit de export — die map staat er nog wel
+  (blijft een orphan-opruimpunt), maar geeft geen fout meer.
+- **De schade van 2026-08-25 staat nog steeds in de live builder-staat**
+  — tab 1 (Eetgelegenheden) is nog kapot. Los opgevoerd als **P1-31**
+  hierboven, mét exact herstelrecept; doe dat vóór er verder gebouwd
+  wordt op deze pagina.
+- **Er staan 3 ongebruikte kopieën van deze pagina in het project:**
+  `HorecagelegenhedenOverzichtCopy`, `...Copy2` en `...Copy2Copy`
+  (routes staan geregistreerd in `nav.dart`, maar **geen enkele
+  `pushNamed` navigeert er ooit heen** — pure backups, zelfde soort
+  orphan als `EventWidget`). Vermoedelijk door Bob gemaakt als vangnet
+  vóór de experimenten. **`Copy2` (en het identieke `Copy2Copy`) is een
+  complete, onbeschadigde momentopname**: alle 6 tabs intact, On Page
+  Load-fetch aanwezig, 5 `onTap`-fetches aanwezig, volledige Page
+  State, plus al 1 zoek-`TextField` in tab 0. Dat is meteen de bron
+  waaruit P1-31's herstelrecept is afgeleid. **Niet weggooien vóór
+  P1-31 hersteld is**; daarna kunnen alle 3 de kopieën weg (naar P2-7).
+- **De hele state-laag voor P2-6 staat al klaar** op zowel de pagina als
+  de kopieën: 6x `alleXxx` (List<dynamic>), 6x `zoektermXxx` (String),
+  6x `categorieFilterXxx` (String) — per tab één set. Alleen de
+  widget-wiring (stappen 3/4/6) ontbreekt nog.
+- **De provincie-variant
+  (`horecagelegenheden_overzicht_provincie_page_widget.dart`) is nog
+  helemaal niet aangeraakt**: 6 intacte tabs, 0 `fetchAlleHorecagelegenheden`-
+  aanroepen, 0 `TextFormField`s, en zijn model heeft géén `alleXxx`/
+  `zoekterm`-velden. Daar moet stap 1/2 dus nog volledig gebeuren.
+- **Advies voor de volgende builder-sessie:** eerst P1-31 herstellen,
+  dán pas stap 3/4/6. Als het toevoegen van widgets aan deze pagina
+  opnieuw kapotgaat, is `Copy2` een kant-en-klaar alternatief om op
+  verder te bouwen (route omzetten in `drawer_component` +
+  `horecagelegenheid_current` kost 2 Navigate-To-wijzigingen) — maar
+  onbekend of die kopie dezelfde latente builder-staat-corruptie
+  meedraagt, dus alleen als plan B.
 2. Zodra widgets weer normaal toegevoegd kunnen worden: bouw het
 2. Zodra widgets weer normaal toegevoegd kunnen worden: bouw het
    zoekveld + categorie-filter zoals hierboven al uitgewerkt (via
    zoekveld + categorie-filter zoals hierboven al uitgewerkt (via
    Copy/Paste vanaf 1 geconfigureerd `TextField` naar de `Column`
    Copy/Paste vanaf 1 geconfigureerd `TextField` naar de `Column`