|
@@ -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`
|