|
|
@@ -32,16 +32,42 @@ Value "Kies je gemeente"** (`valueOrDefault(FFAppState().gemeenteSelectNaam,
|
|
|
"Amsterdam" — wil je dat anders, het is één tekstveld in dezelfde binding.
|
|
|
FlutterFlow-commit: Bob.*
|
|
|
|
|
|
-**P2-28 · `Selectprovinciegemeente` opknappen · Eigenaar: Claude (volgende).**
|
|
|
-Door P2-19 is dit de eerste pagina waar een nieuwe gebruiker heen tikt, en hij
|
|
|
-oogt onaf: titel **"Select gemeente/provincie"** (Engels/Nederlands gemengd),
|
|
|
-een eigen oude AppBar (rood) met een hamburger die half onder de balk uitsteekt
|
|
|
-(zelfde statusbalk-patroon als P1-49, maar hier op de pagina zelf), en de twee
|
|
|
-dropdowns + "Toepassen" in een klein wit blok linksboven zonder uitleg. Plan:
|
|
|
-standaardheader (recept in `CLAUDE.md`, `showBackButton` aan), titel "Kies je
|
|
|
-gemeente", korte uitleg ("Je ziet dan het uitgaansnieuws van die gemeente in
|
|
|
-het menu"), dropdowns op volle breedte, en na *Toepassen* terug naar de vorige
|
|
|
-pagina. Kost één sessie-blok.
|
|
|
+**P2-28 · `Selectprovinciegemeente` opknappen · ✅ AFGEROND 2026-09-15 (Claude,
|
|
|
+builder + verse export per stap + profile-build op de telefoon-emulator).**
|
|
|
+*Gedaan: standaardheader (PreferredSize 80 / `info` / elevation 2 / toolbar 25% /
|
|
|
+bottom 70 / flexibleSpace met `HeaderButtonsComponent`, `showBackButton: true`)
|
|
|
+in plaats van de oude rode AppBar met de half onder de statusbalk geklemde
|
|
|
+hamburger; de oude titel-`Text` en de leading-`Row` zijn weg. In de body een kop
|
|
|
+**"Kies je gemeente"** (`titleLarge`) + uitleg "Je ziet dan het uitgaansnieuws
|
|
|
+van die gemeente in het menu.", beide in de al bestaande lege `Column` met
|
|
|
+padding 16. Beide dropdowns én de Toepassen-knop op `double.infinity`, en
|
|
|
+Toepassen doet nu `context.safePop()` (Navigate Back, met "Navigate to Root Page
|
|
|
+on Failure" aan) i.p.v. `pushNamed(Home)`. Live nagelopen op de telefoon-AVD:
|
|
|
+header past op één regel, Toepassen brengt je terug naar Home met de Amsterdamse
|
|
|
+lijst. `dart analyze` op de verse export: 0 errors. FlutterFlow-commit: Bob.*
|
|
|
+
|
|
|
+**Restpunt uit P2-28 — keuze voor Bob: de header blijft "Kies je gemeente"
|
|
|
+zeggen, ook nadat je Toepassen hebt gebruikt.** Oorzaak precies gevonden:
|
|
|
+`SelectStateDropDownComponent` heeft in zijn On-Component-Load een fallback die
|
|
|
+`gemeenteSelectId = '28694'` **én** `gemeenteSelectNaam = 'Amsterdam (gemeente)'`
|
|
|
+zet — maar die staat achter `if (gemeenteSelectId is leeg)`, en `app_state.dart`
|
|
|
+geeft `_gemeenteSelectId` al de default `'28694'`. Die tak vuurt dus nooit en de
|
|
|
+naam blijft `''`, waardoor P2-19's `valueOrDefault(...)` "Kies je gemeente"
|
|
|
+toont tot je de gemeente-dropdown daadwerkelijk *wijzigt*. Twee opties:
|
|
|
+(a) laten zoals het is (de uitnodiging blijft staan, bewuste keuze bij P2-19);
|
|
|
+(b) in App State de default van `gemeenteSelectId` leegmaken — dan vult de
|
|
|
+bestaande fallback bij de eerste start id **en** naam, en toont de header meteen
|
|
|
+"Amsterdam (gemeente)".
|
|
|
+*Claude probeerde variant (c) — een `Update App State`-actie vóór Navigate Back
|
|
|
+die `gemeenteSelectNaam` met `gemeenteNaamById()` vult — maar de Set-Variable-
|
|
|
+dialoog in de Action Flow Editor viel bij elke poging dicht zodra er in het
|
|
|
+zoekveld getypt werd (4 pogingen, zie `CLAUDE.md`). De halve actie is weer
|
|
|
+verwijderd; de keten is weer alleen `Navigate Back`.*
|
|
|
+
|
|
|
+**Niet gewijzigd, ter info:** de favoriete-gemeente-chips onderaan dezelfde
|
|
|
+component navigeren nog steeds naar Home (`pushNamed`) i.p.v. terug. Dat is
|
|
|
+verdedigbaar ("ga naar deze gemeente") en viel buiten de opdracht — zeg het als
|
|
|
+je ze ook op `safePop` wilt.
|
|
|
|
|
|
**Oude planbeschrijving P2-19 (ter referentie):**
|
|
|
`HeaderButtonsComponent` bevat al een 200×200 logo-`Image` en een `Text` op
|
|
|
@@ -61,14 +87,23 @@ tijdsfilter scrolt niemand daar doorheen. Drupal-kant: twee exposed filters op
|
|
|
recept in `CLAUDE.md` bij "exposed date-filter"). App-kant daarna: twee
|
|
|
query-variabelen op de call + drie chips boven de lijst die de datums zetten.
|
|
|
|
|
|
-**P2-26 · Zoekveld op de evenementenlijsten · Eigenaar: Claude (na P2-19).**
|
|
|
-Horeca heeft een zoekveld (`filterHorecagelegenheden` over een `_model`-lijst),
|
|
|
-de events-tabs niet. Zelfde patroon: On Page Load de display in een page-state-
|
|
|
-lijst laden, `TextField` + custom function `filterEvenementen(lijst, zoekterm)`
|
|
|
-op titel/plaats/categorie, `StaggeredView` over het resultaat. Let op de
|
|
|
-2000 ms `EasyDebounce` op On Change (bekend, niet instelbaar). Alternatief als
|
|
|
-de lijsten te groot worden voor client-side: een `title`-contains exposed
|
|
|
-filter in de view.
|
|
|
+**P2-26 · Zoekveld op de evenementenlijsten · ⚠️ HERZIEN 2026-09-15 (Claude,
|
|
|
+gemeten) — het horeca-patroon kan hier NIET, dit begint bij jou in Drupal.**
|
|
|
+De aanname "zelfde patroon als horeca" gaat niet op. Horeca laadt zijn hele
|
|
|
+lijst in `_model.alleX` en filtert client-side; de Home-tabs draaien op een
|
|
|
+`PagedMasonryGridView` met een `pagingController` (server-side paginering, 25
|
|
|
+per keer). Client-side filteren zou betekenen: eerst álles ophalen. Gemeten op
|
|
|
+productie voor Amsterdam (`townid=28695`, volledig gepagineerd):
|
|
|
+`services_1` **937** items (38 pagina's), `services_3` **497**, `services_5`
|
|
|
+**450**. Dat zijn 38 calls voordat de eerste letter getypt kan worden — geen
|
|
|
+begaanbare weg, en het zou de paginering die er nu netjes staat weggooien.
|
|
|
+**Wat wel werkt: een exposed `title`-contains filter op `flutterflowmobiel1`**
|
|
|
+(zelfde soort ingreep als de twee datumfilters van P2-1, dus goed samen op te
|
|
|
+pakken). Geef het een eigen filter-identifier (bv. `zoek`); daarna is de
|
|
|
+app-kant klein: één query-variabele op de API Call + een `TextField` boven de
|
|
|
+lijst dat bij On Change de page state zet en de pagingController ververst.
|
|
|
+Let op de 2000 ms `EasyDebounce` op On Change (bekend, niet instelbaar) — bij
|
|
|
+een server-side zoekopdracht is die vertraging juist prettig.
|
|
|
|
|
|
**P2-27 · Twee zichtbare oneffenheden op Home · Eigenaar: Bob beslist, Claude bouwt.**
|
|
|
(a) De grijze band om de Home-slider — niet in `HomeUitgaanSliderComponent`
|
|
|
@@ -92,11 +127,11 @@ initialisatie in `main.dart`). Beslissing voor Bob; Claude kan (b) uitvoeren.
|
|
|
|
|
|
**Standaardzin voor de volgende chat:**
|
|
|
|
|
|
-> Pak P2-28 (`Selectprovinciegemeente` opknappen) uit de 🚀-sectie van
|
|
|
-> `TASKS.md` op, en daarna P2-26 (zoekveld op de evenementenlijsten). Je mag
|
|
|
-> zelf in de Chrome-browser in de FlutterFlow-builder werken — ik zit erachter.
|
|
|
-> Stel eerst je stappen voor, wacht op mijn akkoord, verifieer elke wijziging
|
|
|
-> met een verse export en noem het taak-ID.
|
|
|
+> P2-28 is af. Pak nu P2-27 (de grijze band om de Home-slider lokaliseren en
|
|
|
+> wegwerken) uit de 🚀-sectie van `TASKS.md` op. Je mag zelf in de Chrome-
|
|
|
+> browser in de FlutterFlow-builder werken — ik zit erachter. Verifieer elke
|
|
|
+> wijziging met een verse export en noem het taak-ID. P2-1 en P2-26 wachten
|
|
|
+> allebei eerst op exposed filters in `flutterflowmobiel1` (mijn kant).
|
|
|
|
|
|
*Stand 2026-09-14 avond: `lib/` in git is gelijk aan FlutterFlow (laatste
|
|
|
export 22:20). Nog te doen door Bob: FlutterFlow-commit op `main` voor
|