|
@@ -46,7 +46,12 @@ klopt sinds je 'm las.*
|
|
|
2026-09-18 op Bob's vraag. Teksten NL+EN staan kant-en-klaar in het blok
|
|
2026-09-18 op Bob's vraag. Teksten NL+EN staan kant-en-klaar in het blok
|
|
|
hieronder; alleen nog plaatsen in de builder. Pak dit samen met taak 87 op,
|
|
hieronder; alleen nog plaatsen in de builder. Pak dit samen met taak 87 op,
|
|
|
die overlapt met de regel bij "Uw Horecagelegenheid".
|
|
die overlapt met de regel bij "Uw Horecagelegenheid".
|
|
|
-9. **97 · zoekveld ook op de provincie-horeca-pagina · Eigenaar: Bob** — besluit Bob 2026-09-18.
|
|
|
|
|
|
|
+9. **97c · null-veiligheid herstellen op de provincie-horeca-pagina** —
|
|
|
|
|
+ regressie uit taak 97, zie het blok verderop. Klein, maar het is een crash.
|
|
|
|
|
+10. **97d · Engelse vertaling van de hint "Zoek op naam"** op diezelfde pagina
|
|
|
|
|
+ (sleutel `nm6s2mkp`, `en` is leeg).
|
|
|
|
|
+11. ~~97 · zoekveld provincie-horeca~~ — **AF 2026-09-19** (Bob gebouwd,
|
|
|
|
|
+ export-geverifieerd, commit `9344bb7`) — besluit Bob 2026-09-18.
|
|
|
Zie blok verderop.
|
|
Zie blok verderop.
|
|
|
|
|
|
|
|
## 🎯 KLAARGEZET VOOR BOB — 2026-09-18 avond (door Claude, sessie "livegang-vooruitwerken")
|
|
## 🎯 KLAARGEZET VOOR BOB — 2026-09-18 avond (door Claude, sessie "livegang-vooruitwerken")
|
|
@@ -6647,37 +6652,38 @@ kranten-uitstraling.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-### 97 · zoekveld ook op de provincie-horeca-pagina · Eigenaar: Bob
|
|
|
|
|
|
|
+### 97c · null-veiligheid herstellen na het zoekveld (provincie-horeca)
|
|
|
|
|
|
|
|
-*94 (StaggeredView 1/1/2/3 op P-Uitgaan), 95 (Empty List Widget op P-Uitgaan én
|
|
|
|
|
-de zes provincie-tabs) en 96 (AdBanner op beide horeca-overzichten) zijn op
|
|
|
|
|
-2026-09-19 afgerond en gecommit (`d9c4ccb`, `32843e9`).*
|
|
|
|
|
|
|
+*Taak 97 zelf is af (commit `9344bb7`): zoekveld bovenaan, On Change → Rebuild
|
|
|
|
|
+Page met 2000 ms debounce, 6× `filterHorecagelegenheden`. Dit is het restpunt.*
|
|
|
|
|
|
|
|
-**Wat er moet gebeuren.** `HorecagelegenhedenOverzichtProvinciePage` heeft geen
|
|
|
|
|
-zoekveld; de gemeente-versie (`horecagelegenhedenOverzichtCurrent`) wel. Verder
|
|
|
|
|
-zijn die twee pagina's nu gelijk (AppBar 80, 6 tabs, kolommen 1/1/2/3,
|
|
|
|
|
-`.take(100)`/`.take(1000)`, 6× Empty List Widget, AdBanner).
|
|
|
|
|
|
|
+**Het probleem.** De binding van het argument `items` levert per tab dit op:
|
|
|
|
|
|
|
|
-Over te nemen van de gemeente-versie:
|
|
|
|
|
-1. een `TextFormField` bovenaan de Column (boven de tabs), met een **On
|
|
|
|
|
- Change**-actie die de page state `zoektermActiviteiten` vult;
|
|
|
|
|
-2. op **alle zes** de `StaggeredView`s de *Generate Dynamic Children*-waarde
|
|
|
|
|
- omzetten naar `filterHorecagelegenheden(<lijst>, _model.textController.text,
|
|
|
|
|
- …)` — kijk voor de exacte argumenten op regel ~554 van
|
|
|
|
|
- `horecagelegenheden_overzicht_current_widget.dart` in een verse export.
|
|
|
|
|
|
|
+```dart
|
|
|
|
|
+HorecagelegenheidoverzichtCall.items(response.jsonBody)!.toList()
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Let op de **`!`**. Vóór taak 97 stond er `...?.toList() ?? []` — null-veilig.
|
|
|
|
|
+`ApiManager` geeft bij élke exception een respons met `jsonBody == null`, dus
|
|
|
|
|
+`items()` levert dan `null` en de `!` gooit: **de pagina crasht zodra één van de
|
|
|
|
|
+zes calls mislukt** (offline, server down). 6× in het bestand.
|
|
|
|
|
+
|
|
|
|
|
+Oorzaak: de parameter `items` van `filterHorecagelegenheden` is `List<dynamic>`
|
|
|
|
|
+(non-nullable), en dan forceert FlutterFlow met `!`. De gemeente-pagina heeft dit
|
|
|
|
|
+niet, want die geeft een page-state-lijst door die altijd non-null is.
|
|
|
|
|
+
|
|
|
|
|
+**De fix — twee kleine stappen in Custom Code → `filterHorecagelegenheden`:**
|
|
|
|
|
+1. Bij het argument **`items`**: **Nullable** aanvinken (`List<dynamic>?`).
|
|
|
|
|
+2. In de body, de enige plek waar `items` gebruikt wordt (±regel 40):
|
|
|
|
|
+ `return items.where((item) {` → `return (items ?? []).where((item) {`
|
|
|
|
|
+3. **Ctrl+S** — zonder die toetsaanslag haalt de wijziging de export niet.
|
|
|
|
|
|
|
|
-**⚠️ Waarom dit bij Bob ligt en niet bij Claude.** Stap 2 is een binding met een
|
|
|
|
|
-**custom function mét argumenten**, en die vraagt een **Confirm** in de
|
|
|
|
|
-Set-Variable-dialoog. Die knop reageert niet op browser-automation (bevestigd
|
|
|
|
|
-2026-09-18, 8 pogingen; Remove en Cancel in diezelfde rij werken wél). Erger:
|
|
|
|
|
-een half gebonden functie-argument **blokkeert de export van het hele project**
|
|
|
|
|
-(`Status: 400`), dus een mislukte poging legt ook andere sessies plat. Zes
|
|
|
|
|
-bindingen achter elkaar is dat risico niet waard.
|
|
|
|
|
|
|
+De zes bindingen hoeven niet opnieuw: het argument houdt zijn naam, FlutterFlow
|
|
|
|
|
+laat de `!` daarna vanzelf weg. De gemeente-pagina blijft werken (een non-null
|
|
|
|
|
+lijst past gewoon in een nullable parameter).
|
|
|
|
|
|
|
|
-Bind `zoekterm` aan **Widget State → TextField** (`_model.textController.text`,
|
|
|
|
|
-non-nullable), **niet** aan de page state — die is `String?` en levert een `!`
|
|
|
|
|
-op die bij de eerste build crasht (het bekende P1-15-patroon). De page state
|
|
|
|
|
-blijft wel nodig als rebuild-trigger.
|
|
|
|
|
|
|
+**Verificatie:** in een verse export moet
|
|
|
|
|
+`grep -c ")!$" <provincie-pagina>_widget.dart` **0** geven (nu 6).
|
|
|
|
|
|
|
|
**Los restpunt (geen eigen nummer, klein):** `PUitgaanPage` zet
|
|
**Los restpunt (geen eigen nummer, klein):** `PUitgaanPage` zet
|
|
|
`HeaderButtonsComponent` in de **`title`**-slot van de AppBar, terwijl élke
|
|
`HeaderButtonsComponent` in de **`title`**-slot van de AppBar, terwijl élke
|