瀏覽代碼

TASKS: 97 afgemeld, 97c (null-veiligheid) en 97d (vertaling) toegevoegd

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 8 小時之前
父節點
當前提交
b8851c8daf
共有 1 個文件被更改,包括 33 次插入27 次删除
  1. 33 27
      TASKS.md

+ 33 - 27
TASKS.md

@@ -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
    hieronder; alleen nog plaatsen in de builder. Pak dit samen met taak 87 op,
    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.
 
 ## 🎯 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
 `HeaderButtonsComponent` in de **`title`**-slot van de AppBar, terwijl élke