Browse Source

Testronde 2026-09-22: bevindingen vastgelegd als taak 132

Volledige doorloop op telefoon- en tablet-emulator met een verse release-APK.
0 analyse-errors, geen exceptions in logcat. Belangrijkste bevindingen:
niet-scrollende zaakpagina (halve Info-tab onbereikbaar), zoekterm die van
Home naar PUitgaanPage lekt met een leeg zoekveld, en een introtekst op
stadsactiviteitAanmaken die directe publicatie belooft terwijl de backend
altijd ongepubliceerd opslaat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 6 hours ago
parent
commit
d2be050a4d
1 changed files with 124 additions and 1 deletions
  1. 124 1
      TASKS.md

+ 124 - 1
TASKS.md

@@ -363,6 +363,129 @@ géén globe en geen EN-vertaling. Dat is een bewuste beperking.
 aangemeld maar nooit op de bevestigingslink geklikt en krijgen dus niets. Geen
 aangemeld maar nooit op de bevestigingslink geklikt en krijgen dus niets. Geen
 app-probleem, wel het sterkste argument voor `confirm = FALSE` in de app.
 app-probleem, wel het sterkste argument voor `confirm = FALSE` in de app.
 
 
+## 🧪 132 · Bevindingen uit de testronde van 2026-09-22 · Eigenaar: nader te bepalen
+
+Volledige doorloop op **emulator-5556 (telefoon, uitgelogd)** en **emulator-5554
+(tablet, ingelogd als bobcity)**, verse release-APK uit een eigen export.
+`dart analyze` gaf **0 errors**; er is geen enkele exception of overflow in
+`logcat` gevallen. Offline-gedrag, netwerkherstel, zoeken, datumfilters,
+categoriefilter, login-foutafhandeling en de nieuwsbrief-toggles werkten alle
+correct. Hieronder wat wél mis is, op volgorde van ernst.
+
+### 132-A · `HorecagelegenheidCurrent` scrollt niet — halve zaakpagina onbereikbaar
+
+Het bestand bevat **0 `SingleChildScrollView`**; de vier tabs zijn kale
+`Column`s in een `TabBarView`. Op een telefoon (411 dp) past daar ná de
+fotostrip, titel en tabbalk nog ongeveer één regel in, en de knop *Alle
+horecagelegenheden* dekt de rest af. Gemeten op BAUT ZUIDAS (nid 50954): van de
+Info-tab zijn **telefoonnummer, e-mail en de volledige "over"-tekst** niet te
+bereiken — de regel *Openingstijden …* wordt middendoor gesneden en er is geen
+scroll. Op tablet valt het minder op, maar het speelt daar ook.
+
+Fix: de Column van elke tab scrollbaar maken (let op het recept in `CLAUDE.md`:
+eerst elke `Expanded` eruit, anders weigert FlutterFlow het).
+
+### 132-B · Zoekterm lekt van Home naar `PUitgaanPage`, met een leeg zoekveld
+
+`FFAppState().zoekterm` is globaal, maar `FilterBalkComponent` maakt zijn
+`TextEditingController` in `initState` **leeg** aan
+(`_model.textController ??= TextEditingController()`, geen `..text = …`).
+Reproductie: op Home zoeken op `jazz` → menu → Gemeente → Uitgaan. De lijst
+toont dan exact de 3 jazz-treffers van Amsterdam (nagemeten tegen
+`flutterflowmobiel1?zoek=jazz`), terwijl het zoekveld *Zoek op titel* als
+placeholder toont. De gebruiker ziet een vrijwel lege pagina zonder oorzaak.
+
+Fix: *Initial Value* van het TextField binden aan App State `zoekterm` (het veld
+zit achter `if (FFAppState().zoekOpen)` en wordt dus pas gebouwd nadat de state
+gevuld is — de bekende "te laat"-valkuil speelt hier niet). Alternatief: de
+zoekterm wissen bij het verlaten van de pagina.
+
+### 132-C · Introtekst `stadsactiviteitAanmaken` belooft iets dat niet gebeurt
+
+Sleutel **`rupw26n4`** (NL én EN) zegt *"Heb je stadsredacteur-rechten voor deze
+plaats, dan staat je activiteit direct online; anders kijken we hem eerst na."*
+`_custom_stadsactiviteit_create()` zet echter **onvoorwaardelijk `status = 0`**,
+óók voor een account met stadsrechten (zie het domeinblok in `CLAUDE.md`). De
+tekst van `uitgaansevenementAanmaken` (`vkjvzuqz`) klopt wél.
+
+Fix: tekst aanpassen naar "we kijken hem eerst na", in beide talen.
+
+### 132-D · Vier Engelse labels staan op de verkeerde tekst (`Duplicate`-erfenis)
+
+| bestand | sleutel | nl | en (fout) |
+|---|---|---|---|
+| `evenement_horecagelegenheid_widget.dart:1253` | `jxlwje5u` | Bezorgen | Opening hours |
+| idem `:1465` | `usg8k534` | Bezorgt in | Opening hours |
+| idem `:1549` | `paqq93tp` | Betaalmogelijkheden | Opening hours |
+| `horecagelegenheid_current_widget.dart:529` | `jwojezxv` | Agenda | User |
+
+Verder zijn álle 219 gerenderde sleutels vertaald (0 lege `en`).
+
+### 132-E · Rechts uitgelijnde elementen missen hun rechterpadding
+
+Op `EventCurrent` raakt de **agenda-knop** exact de schermrand (de deelknop
+ernaast heeft wél ruimte), net als het categorielabel eronder. Op tablet valt
+het **favorietenhartje** op `HorecagelegenheidCurrent` zelfs half buiten beeld.
+
+### 132-F · Omschrijving wordt middendoor gesneden bij meerdere categorielabels
+
+Op een Home-kaart met 4 labels (die op 2 regels vallen) wordt de omschrijving
+zonder "…" afgekapt — zie *Ondernemend Dijk en Waard* op de tab Cultuur & Info.
+De labels eten de ruimte op die de responsive `Max Lines` veronderstelt. Bij één
+label klopt het wel. Overweeg de labels op één regel te begrenzen, of de
+omschrijving één regel korter.
+
+### 132-G · Lege lijst op het horeca-overzicht toont alleen een groot logo
+
+Kies je een categorie zonder treffers (in Amsterdam geldt dat voor 9 van de 13
+opties op de tab Activiteiten, want de dropdown toont de **hele taxonomie**, niet
+wat er in die plaats staat), dan verschijnt een kaal `logo800px.png`. De horeca-
+detailpagina doet dit al goed met `LegeLijstComponent` ("Geen evenementen
+gevonden…"). Hergebruik die hier — dat is de goedkoopste fix; het filteren van de
+dropdown op aanwezige categorieën kan niet betrouwbaar (de lijst is gepagineerd).
+Zelfde punt voor de **Bezorgen**-tab van een zaak zonder bezorginfo: die is nu
+volledig leeg.
+
+### 132-H · Favorieten is uitgelogd een leeg scherm
+
+Tab 1-3 tonen niets en geen uitleg; de uitnodiging *"Met een account bewaar je
+favoriete gemeenten…"* staat op tab 4, twee tabs naar rechts. Verwijs vanaf de
+eerste tab naar die knop (of toon `LegeLijstComponent` met die tekst).
+
+### 132-I · Kleine punten
+
+- **Build-stempel zichtbaar voor eindgebruikers.** `functions.buildStempel()`
+  staat onderaan de **drawer** én op **Favorieten** en toont `onbekend` zolang er
+  geen `--dart-define=BUILD_TS=…` meegaat. Weghalen vóór livegang, of vullen.
+- **Datums in `MijnProfiel`** staan ruw (`2026-09-22 06:06:00`) terwijl de rest
+  van de app *dinsdag 22 sep, 14:00* gebruikt. Geldt voor *Mijn evenementen* en
+  *Eigen activiteiten*.
+- **Kopie-knop is nog `primary`-rood** (restpunt van 127-C) en staat los
+  gecentreerd tússen twee kaarten, waardoor hij bij de verkeerde lijkt te horen.
+- **Persoonlijke agenda toont overal "Binnenkort meer…"**:
+  `favorieten_widget.dart:435` geeft hardcoded `inhoud: null` mee, terwijl alle
+  andere velden netjes uit `$.veld` komen. Vraag: levert
+  `favorieten_agenda.json` een omschrijvingsveld? Zo ja, binden.
+- **Zoekveld krijgt geen focus** als je het opent met het vergrootglas — je moet
+  er zelf nog in tikken.
+- **Login-melding** zegt *"Controleer je gebruikersnaam en wachtwoord"* terwijl
+  het veld *E-mailadres* heet.
+- **Tabnamen inconsistent**: *Favoriete gemeenten* (kleine g) naast *Favoriete
+  Gelegenheden* (hoofdletter G).
+- **Testadvertenties staan nog aan** (zichtbaar op `PUitgaanPage` en het
+  horeca-overzicht); op het horeca-overzicht legt de 468×60-banner zich over de
+  onderste kaart heen. Zie ook G0.6.
+
+### Wat expliciet GOED was
+
+Offline starten (rode banner *Geen verbinding met uitgaanskrant.com* + werkende
+knop **Opnieuw**, geen crash, geen grijs blok) · netwerkherstel · de vier
+datumfilters (nagemeten tegen de API) · zoeken op titel · de tab-bewuste
+categoriedropdown · login-foutafhandeling · de nieuwsbrief-toggles, die per rij
+onafhankelijk schakelen en netjes `subscribe`/`unsubscribe` met CSRF-token
+sturen (status 200) · `EventCurrent` inclusief het horeca-blok, ook als je er via
+de persoonlijke agenda komt · de responsive 1/2/3-kolommen op tablet.
+
 ## 🔔 129 · Sessie-verlopen-melding — verifiëren · Eigenaar: Bob (andere chat)
 ## 🔔 129 · Sessie-verlopen-melding — verifiëren · Eigenaar: Bob (andere chat)
 
 
 **Bob 2026-09-21: niet in deze chat oppakken, alleen noteren.**
 **Bob 2026-09-21: niet in deze chat oppakken, alleen noteren.**
@@ -1080,7 +1203,7 @@ selecteert de dropdown wél de juiste waarde maar verstuurt de create-actie leeg
 De page states worden pas bij het indienen gelezen, dus die mogen gewoon in
 De page states worden pas bij het indienen gelezen, dus die mogen gewoon in
 On Page Load — daar speelt het timingprobleem niet.
 On Page Load — daar speelt het timingprobleem niet.
 
 
-#### 127-E · Activiteitenformulier voorvullen · ⚠️ na 124 · Eigenaar: n.t.b.
+#### 127-E · Activiteitenformulier voorvullen · Eigenaar: Claude — bezig (2026-09-22)
 
 
 24 bindingen. Tien TextFields (`titel`, `omschrijving`, `organisator`, `contact`,
 24 bindingen. Tien TextFields (`titel`, `omschrijving`, `organisator`, `contact`,
 `adres_straat` → *Adres*, `adres_plaats` → *Plaats*, `adres_postcode`,
 `adres_straat` → *Adres*, `adres_plaats` → *Plaats*, `adres_postcode`,