|
|
@@ -554,308 +554,61 @@ De labels eten de ruimte op die de responsive `Max Lines` veronderstelt. Bij é
|
|
|
label klopt het wel. Overweeg de labels op één regel te begrenzen, of de
|
|
|
omschrijving één regel korter.
|
|
|
|
|
|
-### 132-G · Lege lijst toont een logo i.p.v. een melding · Eigenaar: **Claude** (2026-09-23: FASE 1 AF EN OP TOESTEL BEWEZEN — fase 2 kan beginnen)
|
|
|
-
|
|
|
-#### ✅ Fase 1 volledig af (2026-09-23), inclusief toesteltest
|
|
|
-
|
|
|
-- **Custom function `tweetalig(nlText, enText)`** staat er — beide argumenten
|
|
|
- non-nullable String, return String met *Nullable* uit. Export regel 562 van
|
|
|
- `custom_functions.dart`.
|
|
|
-- **Component `LegeLijstMelding`** (`lib/shared/lege_lijst_melding/`) —
|
|
|
- gedupliceerd van `LegeLijstComponent`, parameters `nlTekst` + `enTekst` (beide
|
|
|
- required String). De Text-binding werd `functions.tweetalig(widget!.nlTekst!,
|
|
|
- widget!.enTekst!)` — **zonder `valueOrDefault`-wrapper**, precies zoals
|
|
|
- bedoeld bij een non-nullable return.
|
|
|
- - 💡 *Een component-parameter HERNOEMEN behoudt de binding:* `tekst` →
|
|
|
- `nlTekst` liet de bestaande Text-binding intact, dus die hoefde niet opnieuw.
|
|
|
-- **Proefplek `MijnAanmeldingen`** — `StaggeredView` → Empty List Widget →
|
|
|
- Widget Type *Component* → `LegeLijstMelding`, Center Component aan.
|
|
|
- Export regel 211-217; de apostrof in "haven't" is netjes geëscaped.
|
|
|
-- `dart analyze` op de verse export: **0 errors**.
|
|
|
-
|
|
|
-- **Horizontale padding toegevoegd** op de Column van het component (nu
|
|
|
- `EdgeInsets.fromSTEB(24, 24, 24, 24)`, paneel toont *Symmetric (24, 24)*) —
|
|
|
- zonder die padding plakt een lange Engelse regel tegen beide schermranden.
|
|
|
- Geldt meteen voor alle toekomstige plekken.
|
|
|
-
|
|
|
-**✅ Toesteltest geslaagd** (x64-release-APK op `emulator-5554`, telefoon):
|
|
|
-NL toont *"Je hebt nog geen komende evenementen of activiteiten aangemaakt."*,
|
|
|
-EN toont *"You haven't created any upcoming events or activities yet."* — dus
|
|
|
-`tweetalig` kiest de juiste tak. Emulator daarna hersteld (netwerk aan, locale
|
|
|
-terug op `nl-NL`).
|
|
|
-
|
|
|
-💡 **Recept om een lege staat te forceren zonder in te loggen:** zet het netwerk
|
|
|
-uit (`svc wifi disable` + `svc data disable`) en start de pagina via een deep
|
|
|
-link. De paging-binding van `MijnAanmeldingen` is `(getJsonField(..., r'$') ??
|
|
|
-[]).toList()`, dus een mislukte call geeft netjes `[]` → de lege-lijst-widget.
|
|
|
-*Uitgelogd* werkt **niet** als test — zie de bug hieronder.
|
|
|
-
|
|
|
-⚠️ **BIJVANGST-BUG (nieuw, niet in scope van 132-G): `MijnAanmeldingen` toont
|
|
|
-uitgelogd vier kaarten met "null".** Het endpoint geeft anoniem een
|
|
|
-foutmelding-array terug, en die wordt als lijst-met-items gerenderd: vier witte
|
|
|
-kaarten met 3× `null` en een Kopie-knop. Gemeten 2026-09-23 op een release-APK
|
|
|
-na `pm clear`. Hoort een lege staat of een inlog-uitnodiging te zijn.
|
|
|
-
|
|
|
-⚠️ **Niet van ons:** de Issues-teller stond op 5 errors bij aanvang en ging naar 7
|
|
|
-tijdens deze sessie — dubbele *Upload Data action*-namen op `ButtonLogo`/
|
|
|
-`ButtonFotos` (het bekende `Duplicate Page`-patroon, van de fotoboek-sessie).
|
|
|
-`export-code` slaagt er gewoon mee, maar ze horen opgeruimd.
|
|
|
-
|
|
|
-#### Het oorspronkelijke besluit
|
|
|
-
|
|
|
-#### ✅ BESLUIT 2026-09-23 (Bob): route A, maar met een custom FUNCTION — geen custom widget
|
|
|
-
|
|
|
-Het uitgangspunt "custom widget" bleek niet nodig. Een custom **function** kan wél bij
|
|
|
-de taal, ook zonder `BuildContext`:
|
|
|
+### 132-G · Lege lijsten: melding i.p.v. logo — **grotendeels AF**, 1 pagina te gaan
|
|
|
|
|
|
-```dart
|
|
|
-String tweetalig(String nlText, String enText) {
|
|
|
- final locales = WidgetsBinding.instance.platformDispatcher.locales;
|
|
|
- for (final l in locales) {
|
|
|
- if (l.languageCode == 'en') { return enText; }
|
|
|
- if (l.languageCode == 'nl') { return nlText; }
|
|
|
- }
|
|
|
- return nlText;
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-- **Getest, niet aangenomen:** `WidgetsBinding` komt via de `material.dart`-import die
|
|
|
- FlutterFlow standaard in `custom_functions.dart` zet — `dart analyze` in een verse
|
|
|
- exportmap gaf **0 errors**, geen extra import nodig (en het import-blok van een
|
|
|
- custom function is toch niet bewerkbaar).
|
|
|
-- **De fallback klopt met Flutter zelf:** bij een niet-ondersteunde systeemtaal valt
|
|
|
- Flutter terug op `supportedLocales.first`, en dat is `Locale('nl')` (nagekeken in
|
|
|
- `app.dart:150` van de SDK). Vandaar `return nlText` als sluitstuk.
|
|
|
-- **Waarom dit beter is dan een custom widget:** de melding blijft een gewone
|
|
|
- FlutterFlow-`Text`, dus alle styling blijft in de builder aanpasbaar. Bij een custom
|
|
|
- widget zou die naar Dart verhuizen.
|
|
|
-- ⚠️ **Return-type: String met *Nullable* UIT.** Bij `String?` eist FlutterFlow een
|
|
|
- "Default Variable Value", en `valueOrDefault` substitueert die óók bij een lege
|
|
|
- string.
|
|
|
-- **Prijs:** deze teksten komen niet in `internationalization.dart`, dus geen globe en
|
|
|
- geen vertaalaudit. Daar staat tegenover dat NL en EN op één regel in de export staan:
|
|
|
- `grep -rn "functions.tweetalig(" lib/ --include=*.dart` toont beide talen naast
|
|
|
- elkaar, wat een diff tussen twee bestanden vervangt.
|
|
|
-
|
|
|
-**Bouwen, eenmalig:**
|
|
|
-1. Custom function `tweetalig` (body hierboven).
|
|
|
-2. Nieuw component **`LegeLijstMelding`** — dupliceer `LegeLijstComponent` (Icon + Text
|
|
|
- staan dan al goed), geef het twee **required** String-parameters `nlTekst` /
|
|
|
- `enTekst`, en bind de Text-waarde één keer aan `tweetalig(nlTekst, enTekst)`.
|
|
|
-
|
|
|
-Het bestaande `LegeLijstComponent` blijft ongemoeid staan met zijn vier plekken op
|
|
|
-`mijnProfiel` — bewust gefaseerd, zodat er niets breekt en we per plek overschakelen.
|
|
|
-**Per gebruiksplek daarna alleen nog:** Empty List Widget → Widget Type *Component* →
|
|
|
-`LegeLijstMelding` → twee letterlijke strings in het parameterpaneel. Dat is het
|
|
|
-makkelijke klikwerk; de fragiele Set-Variable-dialoog komt maar één keer voor (stap 2).
|
|
|
-
|
|
|
-**Fasering:**
|
|
|
-
|
|
|
-| Fase | Wat | Omvang |
|
|
|
-|---|---|---|
|
|
|
-| 1 | Functie + component + **één** proefplek (`MijnAanmeldingen`) + EN-test op toestel | eenmalig |
|
|
|
-| 2 | De 4 evenementen-plekken (Home-tabs, Home-slider, PUitgaan-lijst, PUitgaan-slider) | 4× |
|
|
|
-| 3 | Horeca: overzicht Current (6) + ProvinciePage (6) + `thuisBezorgen` (1) | 13× |
|
|
|
-| 4 | Later: Favorieten tab 1-3 (hebben nu géén lege staat) + de 4 bestaande `mijnProfiel`-plekken omzetten | optioneel |
|
|
|
-
|
|
|
-EN-test na fase 1:
|
|
|
-`adb shell cmd locale set-app-locales com.uitgaanskrant.app --locales en-US` (daarna
|
|
|
-terug naar `nl-NL`).
|
|
|
-
|
|
|
-#### ✅ STAND 2026-09-23 — volledige audit van ALLE lijsten in levende code
|
|
|
-
|
|
|
-Niet meer alleen "waar staat een logo", maar elke `PagedMasonryGridView` /
|
|
|
-`MasonryGridView` / `ListView.builder` / `CarouselSlider` in bereikbare code,
|
|
|
-afgezet tegen wat hij bij leeg toont. Dat leverde meer op dan de eerste
|
|
|
-inventaris, die alleen op logo's zocht.
|
|
|
-
|
|
|
-**Klaar: 15 instanties `LegeLijstMelding`**, alle met beide talen gevuld,
|
|
|
-`dart analyze` 0 errors.
|
|
|
-
|
|
|
-**1 · Nog te doen — `HorecagelegenhedenOverzichtProvinciePage`, 5 van de 6 tabs · Eigenaar: Bob (besluit 2026-09-23)**
|
|
|
-Stand 2026-09-23 (Claude, export-geverifieerd): **tab 4 (Overnachten) staat**, met de
|
|
|
-juiste NL/EN-tekst. Tab 1, 2, 3, 5 en 6 staan nog op `logo800px`. Claude kwam
|
|
|
-niet verder: bij de zoom van het Chrome-venster toont de gefilterde boom maar
|
|
|
-drie van de zes tabs en scrollt niet, en de eerste poging landde daardoor op de
|
|
|
-verkeerde tab (inmiddels gecorrigeerd). **Exacte stappen per tab, in je eigen
|
|
|
-browser (5×):**
|
|
|
-1. Pagina openen → Widget Tree → zoekveld `StaggeredView` → de boom toont zes
|
|
|
- `StaggeredView`-rijen in **tabvolgorde** (1 Activiteiten · 2 Cultuur ·
|
|
|
- 3 Eetgelegenheden · 4 Overnachten ✅ · 5 Uitgaan · 6 Verhuur). Klik de rij.
|
|
|
-2. Rechterpaneel → "Search properties..." → `Widget Type` → dropdown staat op
|
|
|
- *Image* → kies **Component**.
|
|
|
-3. Zoekfilter → `Component` → knop **Select Component** → zoek
|
|
|
- `LegeLijstMelding` → aanklikken. *Center Component* staat dan al aan.
|
|
|
-4. Zoekfilter → `Parameter` → rij **nlTekst** openklappen → Value → NL-tekst
|
|
|
- uit de tabel in blok B hieronder → rij **enTekst** → Value → EN-tekst.
|
|
|
- (Toggle "Show Empty List Widget" staat op deze pagina al aan; niets aan doen.)
|
|
|
-5. Controle in één keer, op een verse export:
|
|
|
- `grep -c logo800px lib/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_provincie_page/*_widget.dart`
|
|
|
- hoort op **0** uit te komen, en
|
|
|
- `grep -n "nlTekst:" -A1 <zelfde bestand>` toont de zes teksten in tabvolgorde.
|
|
|
- Zelfde zes tabs in dezelfde volgorde als
|
|
|
-`...OverzichtCurrent`, dus de teksten uit blok B zijn één-op-één te hergebruiken
|
|
|
-(Bob koos voor tab 3-6 de korte variant *"Geen gelegenheden gevonden..."* /
|
|
|
-*"No places found..."*). Filter de tree op `StaggeredView` → zes in tabvolgorde.
|
|
|
-Bereikbaar via de drawer onder **Provincie**.
|
|
|
-
|
|
|
-**2 · Nieuw gevonden — `mijnProfiel`, tab Nieuwsbrieven**
|
|
|
-De `ListView` op `NieuwsbrievenCall` (regel ~2243) heeft **geen** lege staat;
|
|
|
-gebouwd in taak 128. Voorstel: *"Er zijn op dit moment geen nieuwsbrieven."* /
|
|
|
-*"There are no newsletters at the moment."*
|
|
|
-
|
|
|
-**3 · Andere categorie: drie FOTOcarousels, geen lijsten**
|
|
|
-Een tekstmelding in een beeldcarousel is discutabel — eigen besluit, niet
|
|
|
-automatisch meenemen:
|
|
|
-- `HorecagelegenheidCurrent` (~r266) — foto's van de zaak, toont nu een logo
|
|
|
-- `EvenementHorecagelegenheid` (~r1084) — toont niets
|
|
|
-- `EventCurrent` (~r241) — toont niets
|
|
|
-
|
|
|
-**4 · Werkt al, alleen niet tweetalig: 4× het oude `LegeLijstComponent`**
|
|
|
-op `mijnProfiel` (+1 in `FotoboekGridComponent`). Die tonen gewoon Nederlandse
|
|
|
-tekst; omzetten naar `LegeLijstMelding` kan later, is geen bug.
|
|
|
-
|
|
|
-**Wezen — niet doen:** `evenement_component` (hangt aan de pagina `Event`,
|
|
|
-0 aanroepers) en `SliderUitgaanComponentSmallCurrent` (0 aanroepers).
|
|
|
-
|
|
|
-*Gecorrigeerd 2026-09-23 door Claude:* op `...OverzichtCurrent` tab 4
|
|
|
-(**Overnachten**, `horcat 17965`) stond de Nederlandse tekst óók in het
|
|
|
-`enTekst`-veld; nu *"No places found..."*.
|
|
|
-
|
|
|
-⚠️ **Kleine inconsistentie, geen bug:** *Center Component* staat op de
|
|
|
-horeca-tabs **uit** en op `MijnAanmeldingen` **aan**.
|
|
|
-
|
|
|
-#### 📋 WERKLIJST — alle plekken + de tekst per plek (gemeten 2026-09-23)
|
|
|
-
|
|
|
-20 instellingen te gaan (`MijnAanmeldingen` is al gedaan). Per plek: node
|
|
|
-selecteren → Styling → filter `Empty` → toggle → filter **wissen** → sectie
|
|
|
-*Empty List Widget* → Widget Type **Component** → `LegeLijstMelding` → de twee
|
|
|
-teksten → *Center Component* aan.
|
|
|
+Het component **`LegeLijstMelding`** (`lib/shared/lege_lijst_melding/`) vervangt
|
|
|
+overal het kale `logo800px.png`. Het is tweetalig via de custom function
|
|
|
+`tweetalig(nlText, enText)` — zie `CLAUDE.md` voor dat patroon.
|
|
|
|
|
|
-**A · Vier componenten — één instelling dekt alle tabs die hem gebruiken**
|
|
|
+**Stand (geverifieerd met een verse export, `dart analyze` 0 errors):**
|
|
|
+15 instanties, alle met NL én EN gevuld — Home-tabs, beide sliders,
|
|
|
+PUitgaanPage, `horecagelegenhedenOverzichtCurrent` (6 tabs), `thuisBezorgen`,
|
|
|
+`MijnAanmeldingen`, Favorieten (3 tabs). NL- en EN-tak zijn op een release-APK
|
|
|
+bewezen.
|
|
|
|
|
|
-| # | Component | Dekt | nlTekst / enTekst |
|
|
|
-|---|---|---|---|
|
|
|
-| A1 | `HomeUitgaantabelKaartComponent` | **alle 5 Home-tabs** (Uitgaan, Activiteiten, Cultuur & Info, Films, Jeugd) | Er staat hier nog niets gepland. Probeer een andere datum of categorie. / Nothing is planned here yet. Try another date or category. |
|
|
|
-| A2 | `PUitgaantabelKaartComponent` | `PUitgaanPage` (alle categorieën) | Geen evenementen gevonden. Probeer een andere datum of zoekterm. / No events found. Try another date or search term. |
|
|
|
-| A3 | `HomeUitgaanSliderComponent` | Home-slider (**Carousel**) | Op dit moment niets uitgelicht. / Nothing featured right now. |
|
|
|
-| A4 | `PUitgaanSliderComponent` | PUitgaan-slider (**Carousel**) | Op dit moment niets uitgelicht. / Nothing featured right now. |
|
|
|
-
|
|
|
-⚠️ A3/A4 zijn Carousels; de toggle staat daar al aan (er staat een Image), maar
|
|
|
-`CLAUDE.md` meldt die sectie als voor Claude onbereikbaar — mogelijk Bob-werk.
|
|
|
-
|
|
|
-**B · Horeca-overzicht — 6 tabs × 2 pagina's = 12 instellingen, 6 teksten**
|
|
|
-
|
|
|
-Beide pagina's (`horecagelegenhedenOverzichtCurrent` en
|
|
|
-`HorecagelegenhedenOverzichtProvinciePage`) hebben **dezelfde zes tabs in
|
|
|
-dezelfde volgorde**, dus dezelfde tekst kan twee keer gebruikt worden. Filter de
|
|
|
-tree op `StaggeredView`: dan staan ze in documentvolgorde = tabvolgorde.
|
|
|
-
|
|
|
-| Tab (volgorde) | `horcat` | nlTekst / enTekst |
|
|
|
-|---|---|---|
|
|
|
-| 1 Activiteiten | 17969 | Geen activiteiten gevonden. Probeer een andere categorie. / No activities found. Try another category. |
|
|
|
-| 2 Cultuur | 17963 | Geen culturele gelegenheden gevonden. Probeer een andere categorie. / No cultural venues found. Try another category. |
|
|
|
-| 3 Eetgelegenheden | 34 | Geen eetgelegenheden gevonden. Probeer een andere categorie. / No places to eat found. Try another category. |
|
|
|
-| 4 Overnachten | 17965 | Geen overnachtingen gevonden. Probeer een andere categorie. / No places to stay found. Try another category. |
|
|
|
-| 5 Uitgaan | 17967 | Geen uitgaansgelegenheden gevonden. Probeer een andere categorie. / No nightlife venues found. Try another category. |
|
|
|
-| 6 Verhuur, catering | 17968 | Geen verhuur of catering gevonden. Probeer een andere categorie. / No rental or catering found. Try another category. |
|
|
|
-
|
|
|
-*Waarom "probeer een andere categorie": de categorie-dropdown toont de hele
|
|
|
-taxonomie, niet alleen wat er in die plaats staat — in Amsterdam leveren 9 van de
|
|
|
-13 opties op de tab Activiteiten niets op. Dat is de meest voorkomende reden dat
|
|
|
-deze lijsten leeg zijn.*
|
|
|
+#### Wat er nog ligt
|
|
|
|
|
|
-**C · Eén losse lijst**
|
|
|
+**1 · `HorecagelegenhedenOverzichtProvinciePage` — 6 tabs** (staat er nog met
|
|
|
+6× `logo800px`). Bereikbaar via de drawer onder **Provincie**. Zelfde zes tabs in
|
|
|
+dezelfde volgorde als `...OverzichtCurrent`; filter de tree op `StaggeredView`,
|
|
|
+dan staan ze in tabvolgorde. Per plek: node → Styling → filter `Empty` → toggle →
|
|
|
+filter **wissen** → sectie *Empty List Widget* → Widget Type **Component** →
|
|
|
+`LegeLijstMelding` → twee teksten.
|
|
|
|
|
|
-| # | Waar | nlTekst / enTekst |
|
|
|
+| Tab | nlTekst | enTekst |
|
|
|
|---|---|---|
|
|
|
-| C1 | `thuisBezorgen` | Geen bezorgdiensten gevonden in deze plaats. / No delivery services found in this town. |
|
|
|
-
|
|
|
-**D · Favorieten — ✅ AF (stond al in de export van 2026-09-23 13:45: alle drie de tabs tonen `LegeLijstMeldingWidget`; onderstaande tabel alleen nog ter referentie)**
|
|
|
-
|
|
|
-Deze drie tonen nu een volledig leeg scherm. Naast het component moet hier eerst
|
|
|
-*Show Empty List Widget* aangezet worden.
|
|
|
-
|
|
|
-| # | Tab | Lijst | nlTekst / enTekst |
|
|
|
-|---|---|---|---|
|
|
|
-| D1 | 1 Persoonlijke agenda | `favorietenAgendaItems` | Je persoonlijke agenda is nog leeg. / Your personal agenda is still empty. |
|
|
|
-| D2 | 2 Favoriete gemeenten | `favorieteGemeenteItem` | Je volgt nog geen gemeenten. / You are not following any municipalities yet. |
|
|
|
-| D3 | 3 Favoriete Gelegenheden | `favorieteHorecagelegenheid` | Je hebt nog geen favoriete gelegenheden. Tik op het hartje bij een zaak om hem hier te bewaren. / You have no favourite venues yet. Tap the heart on a venue to save it here. |
|
|
|
+| 1 Activiteiten | Geen activiteiten gevonden. Probeer een andere categorie. | No activities found. Try another category. |
|
|
|
+| 2 Cultuur | Geen culturele gelegenheden gevonden... | No cultural venues found... |
|
|
|
+| 3 Eetgelegenheden | Geen gelegenheden gevonden... | No places found... |
|
|
|
+| 4 Overnachten | Geen gelegenheden gevonden... | No places found... |
|
|
|
+| 5 Uitgaan | Geen gelegenheden gevonden... | No places found... |
|
|
|
+| 6 Verhuur, catering | Geen gelegenheden gevonden... | No places found... |
|
|
|
+
|
|
|
+**2 · `mijnProfiel`, tab Nieuwsbrieven** — die `ListView` (op `NieuwsbrievenCall`)
|
|
|
+heeft géén lege staat. Voorstel: *"Er zijn op dit moment geen nieuwsbrieven."* /
|
|
|
+*"There are no newsletters at the moment."*
|
|
|
|
|
|
-**Bewust NIET doen**
|
|
|
+**3 · Drie FOTOcarousels — eigen besluit, geen lijsten.** Een tekstmelding in een
|
|
|
+beeldcarousel is discutabel: `HorecagelegenheidCurrent` (toont nu een logo),
|
|
|
+`EvenementHorecagelegenheid` en `EventCurrent` (tonen niets).
|
|
|
|
|
|
-- `evenement_component` (`lib/evenement/evenement_component/`) — hangt alleen aan
|
|
|
- de pagina `Event`, en die heeft **0 aanroepers**: wees. Overslaan.
|
|
|
-- `HorecagelegenheidCurrent` regel ~245 — dat is de **fotocarousel** van een zaak
|
|
|
- zonder foto's, geen lege lijst. Een tekstmelding in een beeldcarousel is raar;
|
|
|
- hier is verbergen of een beeld-placeholder logischer. Aparte beslissing voor Bob.
|
|
|
+**4 · Optioneel:** 4× het oude `LegeLijstComponent` op `mijnProfiel` (+1 in
|
|
|
+`FotoboekGridComponent`) omzetten naar `LegeLijstMelding`. Werkt prima, alleen
|
|
|
+eentalig — geen bug.
|
|
|
|
|
|
-#### De inventaris (onderzoek 2026-09-22)
|
|
|
+**Wezen, niet doen:** `evenement_component` (pagina `Event`, 0 aanroepers) en
|
|
|
+`SliderUitgaanComponentSmallCurrent` (0 aanroepers).
|
|
|
|
|
|
-Kies je een categorie zonder treffers, dan verschijnt een kaal `logo800px.png`.
|
|
|
-`LegeLijstComponent` (Icon `event_busy` + `Text`) doet dit al goed op `mijnProfiel`.
|
|
|
+⚠️ Kleine inconsistentie, geen bug: *Center Component* staat op de horeca-tabs
|
|
|
+**uit** en op `MijnAanmeldingen` **aan**.
|
|
|
|
|
|
-**Volledige inventaris — 18 plekken in LEVENDE code, 9 bestanden.** De dode
|
|
|
-kopieën (`kanweg/*`, `home_copy`, `home_copy2`, `p_uitgaan_page_copy{,2,3}`,
|
|
|
-`drawer_component_copy`, `mijn_profiel_copy*`, `evenement/event`) bevatten nog
|
|
|
-~15 logo's; geverifieerd wees (alleen zelfreferenties), overslaan.
|
|
|
+### 132-G2 · `MijnAanmeldingen` toont UITGELOGD vier kaarten met "null"
|
|
|
|
|
|
-| Waar | Plekken | Dekt |
|
|
|
-|---|---|---|
|
|
|
-| `HomeUitgaantabelKaartComponent` | 1 | **alle 5 Home-tabs** (één component) |
|
|
|
-| `HomeUitgaanSliderComponent` | 1 | Home-slider (Carousel) |
|
|
|
-| `PUitgaantabelKaartComponent` | 1 | PUitgaanPage-lijst |
|
|
|
-| `PUitgaanSliderComponent` | 1 | PUitgaan-slider (Carousel) |
|
|
|
-| `MijnAanmeldingen` | 1 | staat op `uitgaanskrant.com-applogo.jpg` |
|
|
|
-| `horecagelegenhedenOverzichtCurrent` | 6 | één per tab |
|
|
|
-| `HorecagelegenhedenOverzichtProvinciePage` | 6 | ⚠️ **wél bereikbaar**, `drawer_component_widget.dart:1209` |
|
|
|
-| `thuisBezorgen` | 1 | |
|
|
|
-| `HorecagelegenheidCurrent:248` | 1 | fotocarousel van een zaak — ander geval, beeld-placeholder verdedigbaar |
|
|
|
-
|
|
|
-Daarnaast: **Favorieten tab 1-3 hebben helemáál geen Empty List Widget** (zie
|
|
|
-132-H), en de agenda-tab van een zaak gebruikt een eigen component
|
|
|
-`GeenEvenementenComponentmoetweg` (Icon + vaste tekst) — functioneel al goed,
|
|
|
-opruimkandidaat.
|
|
|
-
|
|
|
-**Carousels:** op #2 en #4 staat de toggle al aan (er staat immers een Image),
|
|
|
-dus alleen *Widget Type* → Component. Reken er toch op dat dit er twee voor Bob
|
|
|
-zijn; `CLAUDE.md` meldt die checkbox als voor Claude onbereikbaar.
|
|
|
-
|
|
|
-#### i18n — onderzocht 2026-09-22, dit is de kern
|
|
|
-
|
|
|
-De `tekst`-parameter is een **letterlijke string**, dus geen globe en geen
|
|
|
-Engelse vertaling. Drie dingen uitgezocht:
|
|
|
-
|
|
|
-1. **`FFLocalizations.getVariableText({nlText, enText})` bestaat al** in
|
|
|
- `internationalization.dart` — dat is wat FlutterFlow genereert voor een
|
|
|
- niet-statische tekst. Nergens in gebruik.
|
|
|
-2. ⚠️ **De Global Property `locale` is in dit project ONBRUIKBAAR — altijd
|
|
|
- `null`.** `MyApp._locale` begint op `null` en `setAppLanguage()` heeft
|
|
|
- **nul aanroepers** (er is geen taalkiezer). De werkelijke taal komt uit de
|
|
|
- Localizations-delegate (systeemtaal), en die is in de builder geen bron. Een
|
|
|
- Visibility-conditie op "huidige taal" werkt hier dus niet. Niet proberen.
|
|
|
-3. Een custom **function** kan er niet bij (geen `BuildContext`); een custom
|
|
|
- **widget** wel.
|
|
|
-
|
|
|
-**Drie werkbare routes:**
|
|
|
-
|
|
|
-- **D (aanbevolen) — losse componenten per melding.** `Duplicate Component` van
|
|
|
- `LegeLijstComponent`, `tekst`-parameter eraf, vaste `Text` + globe. Nul
|
|
|
- condities, per aanroepplek alleen "Empty List Widget → Component → kies".
|
|
|
- Teksten belanden in `internationalization.dart`, dus de vertaalaudit ziet ze.
|
|
|
- Kosten: ~10-12 componenten in de lijst.
|
|
|
-- **C — één component met een `soort`-parameter** (String) en N conditionele
|
|
|
- `Text`-widgets, elk met eigen i18n-sleutel. Houdt de componentenlijst schoon,
|
|
|
- maar kost 12× een Visibility-conditie met een letterlijke Second Value (het
|
|
|
- bekende verstopte veld). Het patroon zelf is bewezen: `mijn_aanmeldingen_widget.dart:408`
|
|
|
- heeft al `if (widget!.type == 'go_out_event')`.
|
|
|
-- **A — custom widget** met `getVariableText(nlText:, enText:)` en twee
|
|
|
- String-parameters. Minste fragiele klikwerk, maar de teksten staan dan niet in
|
|
|
- `internationalization.dart` (geen globe, geen audit).
|
|
|
-
|
|
|
-**Openstaand besluit voor Bob: D, C of A.** Reken op ~10-12 unieke teksten en
|
|
|
-22 aanroepplekken (18 hierboven + de 4 bestaande op `mijnProfiel` die van
|
|
|
-`tekst:` af moeten bij route D of C).
|
|
|
+Gevonden 2026-09-23 op een release-APK na `pm clear`. Het endpoint geeft anoniem
|
|
|
+een foutmelding-array terug, en die wordt als lijst-met-items gerenderd: vier
|
|
|
+witte kaarten met 3× `null` en een Kopie-knop. Hoort een lege staat of een
|
|
|
+inlog-uitnodiging te zijn. *(Terzijde: hierdoor werkt "uitgelogd" niet als test
|
|
|
+voor een lege lijst — zet in plaats daarvan het netwerk uit, zie `CLAUDE.md`.)*
|
|
|
|
|
|
### 132-H · Favorieten is uitgelogd een leeg scherm
|
|
|
|