|
@@ -390,114 +390,52 @@ Info/Links/Bezorgen-tabs breekt de pagina zichtbaar (RenderFlex-overflow
|
|
|
+ letterlijke "null"-tekst), iets wat met de eerdere lege/placeholder-data
|
|
+ letterlijke "null"-tekst), iets wat met de eerdere lege/placeholder-data
|
|
|
niet zichtbaar was.)*
|
|
niet zichtbaar was.)*
|
|
|
|
|
|
|
|
-**P0-8 · Eigenaar: Bob (het "null"-tekst-restpunt hieronder — Claude
|
|
|
|
|
-geblokkeerd, zie de nieuwe blocker-notitie; het RenderFlex-overflow-punt
|
|
|
|
|
-was al Bob's/Claude's gedeeld sinds eerder).** Nu P0-7 is opgelost en de horeca-detailpagina
|
|
|
|
|
-echte Drupal-data toont, blijken de Info/Links/Bezorgen-tabs zelf **kapot**
|
|
|
|
|
-te zijn — bevestigd live 2026-08-13 (Claude, emulator-5554, nid `91142`
|
|
|
|
|
-"De Beun", zie screenshots in scratchpad-sessie):
|
|
|
|
|
-- **RenderFlex-overflow op alle 3 tabs**, o.a. **"BOTTOM OVERFLOWED BY 209
|
|
|
|
|
- PIXELS"** op de Info-tab — de linkerkolom (logo + adres/plaats/
|
|
|
|
|
- telefoon/email/kvk/cryptocoins) wordt grotendeels **onzichtbaar achter
|
|
|
|
|
- de gele/zwarte dev-overflow-band** geschoven, incl. het echte logo.
|
|
|
|
|
- Root cause (`lib/horecagelegenhedenoverzicht/horecagelegenheid_current/horecagelegenheid_current_widget.dart:511-793`):
|
|
|
|
|
- de Info-tab is een kale `Row` met twee `Column`s (`mainAxisSize.max`,
|
|
|
|
|
- geen `Expanded`/`SingleChildScrollView`) direct in de `TabBarView`'s
|
|
|
|
|
- `Expanded` (regel 507) — zelfde "kale Column/Row zonder scroll-wrapper
|
|
|
|
|
- in een bounded-height ouder"-familie als het al bekende, nog open
|
|
|
|
|
- P1-13 (`MasonryGridView` op `HorecagelegenhedenOverzicht`). Fix:
|
|
|
|
|
- **Wrap Widget → SingleChildScrollView** om de Row (of om de hele
|
|
|
|
|
- `TabBarView`'s children), zelfde patroon dat al elders in het project
|
|
|
|
|
- werkt. **Let op:** probeer niet de Expanded/Shrink-Wrap/Scrollable-
|
|
|
|
|
- toggle-route die bij P1-13 al 2x bevestigd niet doorzet naar de export
|
|
|
|
|
- — ga hier direct voor de SingleChildScrollView-wrap.
|
|
|
|
|
-- **Letterlijke `"null"`-tekst op het scherm bij een leeg veld** — erger
|
|
|
|
|
- dan het al bekende P1-6-patroon (dat toont tenminste een neutrale
|
|
|
|
|
- placeholdertekst). Hier ontbreekt zelfs een `valueOrDefault`-fallback:
|
|
|
|
|
- de code doet direct `getJsonField(..., r'''$[:].<veld>''').toString()`,
|
|
|
|
|
- en `.toString()` op een `null`-resultaat geeft de string `"null"` —
|
|
|
|
|
- live bevestigd op de Links-tab (`http://debeun.nl` gevolgd door een
|
|
|
|
|
- losse regel **"null"**, daarna de Facebook-URL, dan weer **"null"**)
|
|
|
|
|
- en op de Bezorgen-tab (**vier keer op rij "null"**, want De Beun heeft
|
|
|
|
|
- geen bezorgopties ingevuld). **17 velden** in dit bestand hebben dit
|
|
|
|
|
- exacte patroon, geen enkel met guard:
|
|
|
|
|
- - Info-tab (regel ~538-687): `adres`, `plaats`, `telefoonnummer`,
|
|
|
|
|
- `email`, `kvk`.
|
|
|
|
|
- - Links-tab (regel ~798-947): `website`, `menukaart`, `facebook`,
|
|
|
|
|
- `twitter`, `instagram`.
|
|
|
|
|
- - Bezorgen-tab (regel ~953-1161): `afhaalopties`, `bestellink`,
|
|
|
|
|
- `bezorgtijden`, `bezorgkosten`, `minimaleorder`,
|
|
|
|
|
- `thuisbezorgtbetaalopties`, `bezorgdin`.
|
|
|
|
|
- - **Fix (builder, per veld, mechanisch herhaalbaar):** zet op elk van
|
|
|
|
|
- deze 17 `Text`-widgets een Visibility-conditie op het **rauwe**
|
|
|
|
|
- API-veld (dezelfde JSON Path als de Text's eigen binding), operator
|
|
|
|
|
- **"Is Set and Not Empty"** — zelfde recept als het
|
|
|
|
|
- `CachedNetworkImage`/P1-15-patroon in `CLAUDE.md`. Zo verdwijnt de
|
|
|
|
|
- hele regel i.p.v. "null" te tonen wanneer een gelegenheid dat veld
|
|
|
|
|
- niet heeft ingevuld (waarschijnlijk de meeste, gezien de huidige
|
|
|
|
|
- schaarse Drupal-content).
|
|
|
|
|
- - **⚠️ Geblokkeerd voor Claude (2026-08-14, nieuw bevestigd
|
|
|
|
|
- patroon): de Visibility → "Conditional"-toggle op deze pagina
|
|
|
|
|
- reageert niet betrouwbaar op browser-automation-klikken.** 7+
|
|
|
|
|
- pogingen op de `Text-adres`-widget (directe klik op de toggle op
|
|
|
|
|
- meerdere x/y-posities, dubbel-toggelen, `left_click_drag` over de
|
|
|
|
|
- track) leverden telkens **geen zichtbare statusverandering** op —
|
|
|
|
|
- en herhaaldelijk **sprong de selectie terug naar de pagina-root**
|
|
|
|
|
- (rechterpaneel toonde dan `Edit Drawer`/Scaffold-properties i.p.v.
|
|
|
|
|
- de Text-widget). Ook de alternatieve route (rechtsklik → **Wrap
|
|
|
|
|
- Widget (Ctrl+B)**) opende het contextmenu zichtbaar correct, maar
|
|
|
|
|
- de vervolgklik op het menu-item landede door dezelfde bekende
|
|
|
|
|
- tree-rij-offset-instabiliteit (zie `CLAUDE.md`) op een andere
|
|
|
|
|
- tree-rij i.p.v. op "Wrap Widget" — offset bleek dit keer +79px op
|
|
|
|
|
- één moment, +64px een moment later, dus niet met een vaste
|
|
|
|
|
- correctie te compenseren zoals de kalibratietruc normaal
|
|
|
|
|
- toestaat. Geen wijziging aangebracht, geen schade. **Dit is een
|
|
|
|
|
- nieuw, apart bevestigd blocker-patroon** (niet identiek aan de
|
|
|
|
|
- al bekende checkbox-clipping-lijst in `CLAUDE.md`) — zie de
|
|
|
|
|
- toegevoegde notitie daar.
|
|
|
|
|
- - **Kant-en-klaar recept voor Bob (seconden per veld in zijn eigen
|
|
|
|
|
- browser, geen uitzoekwerk meer nodig):** open `HorecagelegenheidCurrent`,
|
|
|
|
|
- selecteer per tab de widget in de Widget Tree, rechterpaneel →
|
|
|
|
|
- **Visibility → Conditional aan** → **Add Condition → Single
|
|
|
|
|
- Condition** → First Value = **hetzelfde databron-veld dat al aan
|
|
|
|
|
- de Text gebonden is** (klik het Value-icoontje naast de Text-
|
|
|
|
|
- property om te zien welke bron/veld dat is — voor alle 17 velden
|
|
|
|
|
- hieronder is dat steeds dezelfde API-call-respons, in de code
|
|
|
|
|
- `horecagelegenheidCurrentEstablishmentInfoResponse.jsonBody`, in
|
|
|
|
|
- de builder waarschijnlijk zichtbaar als "Establishment Info
|
|
|
|
|
- Response" o.i.d.) met JSON Path **exact gelijk aan de veldnaam**
|
|
|
|
|
- → Operator **"Is Set and Not Empty"** → Confirm. Exacte
|
|
|
|
|
- JSON-Path-waarde per veld (geverifieerd tegen de huidige
|
|
|
|
|
- broncode, `$[:].` + veldnaam, dus letterlijk overtypen):
|
|
|
|
|
- - Info-tab: `$[:].adres`, `$[:].plaats`, `$[:].telefoonnummer`,
|
|
|
|
|
- `$[:].email`, `$[:].kvk`.
|
|
|
|
|
- - Links-tab: `$[:].website`, `$[:].menukaart`, `$[:].facebook`,
|
|
|
|
|
- `$[:].twitter`, `$[:].instagram`.
|
|
|
|
|
- - Bezorgen-tab: `$[:].afhaalopties`, `$[:].bestellink`,
|
|
|
|
|
- `$[:].bezorgtijden`, `$[:].bezorgkosten`, `$[:].minimaleorder`,
|
|
|
|
|
- `$[:].thuisbezorgtbetaalopties`, `$[:].bezorgdin`.
|
|
|
|
|
- Test na de eerste 2-3 velden even met een verse export/live-check
|
|
|
|
|
- (nid `91142` "De Beun" heeft weinig ingevulde velden, dus een
|
|
|
|
|
- goede test-case) vóór je alle 17 doorloopt.
|
|
|
|
|
- - **Kanttekening:** geen van deze 17 `Text`-widgets heeft een
|
|
|
|
|
- `launchURL`/`InkWell` eromheen in dit bestand (bevestigd, apart van
|
|
|
|
|
- de al bekende P1-15-knoppen elders) — het zijn platte tekstregels,
|
|
|
|
|
- dus geen crash-risico zoals P1-15, puur een zichtbaarheids-/
|
|
|
|
|
- presentatieprobleem. Wel een gemiste kans dat `website`/`facebook`/
|
|
|
|
|
- `bestellink` niet tikbaar zijn — zie het aparte verbeterpunt
|
|
|
|
|
- hieronder.
|
|
|
|
|
- - **Overlap met P1-5:** de 7 Bezorgen-velden bevestigen exact P1-5's
|
|
|
|
|
- aanname (nog geen enkele gelegenheid heeft bruikbare bezorgdata) —
|
|
|
|
|
- dit maakt P1-5's "koppel aan een echt leverbaar-veld" nog relevanter
|
|
|
|
|
- zodra Drupal-kant die data ooit vult.
|
|
|
|
|
-- **Los verbeterpunt (geen bug, wel P1-waardig):** `website`, `facebook`,
|
|
|
|
|
- `menukaart` en `bestellink` op deze pagina zijn nu platte tekst i.p.v.
|
|
|
|
|
- tikbare links (in tegenstelling tot het vergelijkbare
|
|
|
|
|
- `evenement_horecagelegenheid_widget.dart`, waar deze velden wél
|
|
|
|
|
- `launchURL`-knoppen zijn, zie P1-15). Zodra de "null"-fix hierboven
|
|
|
|
|
- staat, is dit een logische vervolgstap: dezelfde velden `InkWell` +
|
|
|
|
|
- `launchURL` geven, met dezelfde "Is Set"-guard (voorkomt meteen ook
|
|
|
|
|
- een nieuwe P1-15-achtige crash-bij-lege-URL).
|
|
|
|
|
|
|
+*(P0-8 grotendeels afgerond 2026-08-14 — live pair-sessie, Bob deed de
|
|
|
|
|
+builder-edits, Claude verifieerde elk veld met een verse export (zelfde
|
|
|
|
|
+werkwijze als de 2026-08-10-sessie). **Alle 10 Info-tab/Links-tab-velden
|
|
|
|
|
+bevestigd correct** (adres, plaats, telefoonnummer, email, kvk, website,
|
|
|
|
|
+menukaart, facebook, twitter, instagram — allemaal
|
|
|
|
|
+`!= null && != ''`). **Bezorgen-tab:** bestellink/bezorgkosten/
|
|
|
|
|
+minimaleorder ook bevestigd correct; thuisbezorgtbetaalopties werkt met
|
|
|
|
|
+een net iets andere maar functioneel prima variant ("Is Set" i.p.v.
|
|
|
|
|
+"Is Set and Not Empty" — laag risico, blijft zo staan). Onderweg 2x een
|
|
|
|
|
+per-ongeluk omgekeerde conditie (`== ''` i.p.v. `!= '' `) gevonden en
|
|
|
|
|
+gecorrigeerd op adres/kvk/website — zelfde soort verkeerde-operator-fout
|
|
|
|
|
+als hieronder bij Minor-1 blijvend openstaat. **3 restpunten bewust niet
|
|
|
|
|
+als launch-blocker behandeld (Bob's beslissing 2026-08-14)** —
|
|
|
|
|
+verplaatst naar "Minor — non-blockers" hieronder: bezorgtijden (conditie
|
|
|
|
|
+hangt aan het verkeerde veld), afhaalopties + bezorgdin (nog geen
|
|
|
|
|
+conditie, wacht op Bob's uitzoekwerk hoe deze twee velden uit de API
|
|
|
|
|
+komen). Het losse "tikbare links"-verbeterpunt is verplaatst naar P1-23.
|
|
|
|
|
+Uit de P0-lijst verwijderd.)*
|
|
|
|
|
+
|
|
|
|
|
+## Minor — non-blockers (launch mag hier niet op wachten)
|
|
|
|
|
+
|
|
|
|
|
+Bob's expliciete categorie (2026-08-14): kleine restpunten uit P0-8 die
|
|
|
|
|
+de livegang niet blokkeren, later oppakken.
|
|
|
|
|
+
|
|
|
|
|
+**Minor-1 · Eigenaar: Bob.** `HorecagelegenheidCurrent`
|
|
|
|
|
+(`horecagelegenheid_current_widget.dart`), Bezorgen-tab: de
|
|
|
|
|
+Visibility-conditie op de "bezorgtijden"-tekst controleert het
|
|
|
|
|
+verkeerde veld. Bevestigd 2026-08-14 via export:
|
|
|
|
|
+`if (EstablishmentInfoCall.establishmentOpeningstijden(...) != null && ... != '') Text(..., r'''$[:].bezorgtijden''', ...)`
|
|
|
|
|
+— de zichtbaarheid hangt dus af van het **Openingstijden**-veld i.p.v.
|
|
|
|
|
+bezorgtijden zelf (waarschijnlijk per ongeluk het verkeerde item
|
|
|
|
|
+gekozen uit de velden-lijst, namen lijken op elkaar). Fix: First Value
|
|
|
|
|
+van de Single Condition omzetten naar JSON Path `$[:].bezorgtijden`
|
|
|
|
|
+(dezelfde bron als de Text's eigen binding), operator blijft "Is Set
|
|
|
|
|
+and Not Empty". Geen crash, puur verkeerde zichtbaarheidslogica — Bob
|
|
|
|
|
+(2026-08-14): "moet ik later fixen, voor nu blijft er wat staan".
|
|
|
|
|
+
|
|
|
|
|
+**Minor-2 · Eigenaar: Bob.** `HorecagelegenheidCurrent`
|
|
|
|
|
+(`horecagelegenheid_current_widget.dart`), Bezorgen-tab: "afhaalopties"
|
|
|
|
|
+en "bezorgdin" hebben nog geen Visibility-conditie (kale
|
|
|
|
|
+`Text(getJsonField(..., r'''$[:].afhaalopties/bezorgdin''').toString())`)
|
|
|
|
|
+— tonen dus nog een letterlijke "null" bij een leeg veld. Bob moet
|
|
|
|
|
+eerst uitzoeken hoe deze twee velden uit de API komen (2026-08-14:
|
|
|
|
|
+"moet ik even kijken") voordat de standaard "Is Set and Not
|
|
|
|
|
+Empty"-fix (zelfde recept als de overige 15 velden van het
|
|
|
|
|
+oorspronkelijke P0-8) toegepast kan worden.
|
|
|
|
|
|
|
|
## Drupal dingen — verzamellijst, batchen bij Bob's eigen Drupal-sessie
|
|
## Drupal dingen — verzamellijst, batchen bij Bob's eigen Drupal-sessie
|
|
|
|
|
|
|
@@ -548,6 +486,17 @@ toch al wachten op ander Drupal-werk hier verzamelen i.p.v. los oppakken
|
|
|
|
|
|
|
|
## P1 — snel na livegang
|
|
## P1 — snel na livegang
|
|
|
|
|
|
|
|
|
|
+**P1-23 · Eigenaar: Bob.** `HorecagelegenheidCurrent`
|
|
|
|
|
+(`horecagelegenheid_current_widget.dart`): `website`, `facebook`,
|
|
|
|
|
+`menukaart` en `bestellink` zijn platte tekst i.p.v. tikbare links (in
|
|
|
|
|
+tegenstelling tot het vergelijkbare `evenement_horecagelegenheid_widget.dart`,
|
|
|
|
|
+waar deze velden wél `launchURL`-knoppen zijn, zie P1-15). Nu de
|
|
|
|
|
+"null"-tekst-fix van het voormalige P0-8 staat, is dit een logische
|
|
|
|
|
+vervolgstap: dezelfde velden `InkWell` + `launchURL` geven, met
|
|
|
|
|
+dezelfde "Is Set"-guard (voorkomt meteen ook een nieuwe
|
|
|
|
|
+P1-15-achtige crash-bij-lege-URL). Geen van deze 4 `Text`-widgets
|
|
|
|
|
+heeft momenteel een `launchURL`/`InkWell` eromheen in dit bestand.
|
|
|
|
|
+
|
|
|
*(P1-18 afgerond 2026-08-10 avond — Bob, builder + Custom Code, in
|
|
*(P1-18 afgerond 2026-08-10 avond — Bob, builder + Custom Code, in
|
|
|
twee stappen. Root cause was een dubbele bug: (1) `login_widget.dart`
|
|
twee stappen. Root cause was een dubbele bug: (1) `login_widget.dart`
|
|
|
behandelde het `drupalLogin`-resultaat als `bool` i.p.v. een JSON-map
|
|
behandelde het `drupalLogin`-resultaat als `bool` i.p.v. een JSON-map
|