|
|
@@ -366,26 +366,13 @@ P1-18) — Tab 3 haalt live data op via `FavorietenAgendaCall`. Uit deze
|
|
|
lijst verwijderd.)*
|
|
|
|
|
|
**P0-5 · Eigenaar: Bob.** Drupal: anonieme leestoegang onderzoeken
|
|
|
-voor browse-endpoints. Drupal-niveau, geen Claude-taak. **Bijvangst
|
|
|
-2026-08-12 (Claude, code-audit):** alle API-calls in `api_calls.dart`
|
|
|
-(o.a. `EstablishmentInfoCall`, `EstablishmentsCall`) sturen een
|
|
|
-**hardcoded Basic-Auth-header mee** (`Authorization: Basic
|
|
|
-Ym9iOnNlcmhpaQ==`, decodeert naar `bob:serhii`) — dit staat letterlijk
|
|
|
-in de gecompileerde APK en is dus met een gratis decompiler
|
|
|
-(bv. `jadx`) door iedereen uit te lezen. **Verduidelijkt door Bob
|
|
|
-(2026-08-12): dit account is alleen nodig voor de
|
|
|
-`devbob.uitgaanskrant.com`-omgeving (dev/staging zit achter een
|
|
|
-username/wachtwoord-poort) — tegen de productie-URL
|
|
|
-(`uitgaanskrant.com`, wat de app daadwerkelijk aanroept) doet de header
|
|
|
-niets schadelijks, geeft geen foutmelding, is dus effectief dood
|
|
|
-gewicht daar.** Praktisch gevolg: minder urgent dan eerder
|
|
|
-ingeschat (geen live-productie-credential-lek), maar nog steeds het
|
|
|
-opruimen waard — een onnodige hardcoded header die alsnog een
|
|
|
-dev-omgevingswachtwoord blootlegt zodra iemand de APK decompileert, en
|
|
|
-die zonder functie is zodra de app alleen tegen productie draait.
|
|
|
-**Vers herbevestigd 2026-08-13 (Claude, grep):** nog steeds 15
|
|
|
-treffers van deze exacte header in `api_calls.dart` — geen voortgang,
|
|
|
-taak blijft valide.
|
|
|
+voor browse-endpoints. Drupal-niveau, geen Claude-taak — nog open.
|
|
|
+*(Bijvangst afgerond 2026-08-14, live pair-sessie: de hardcoded
|
|
|
+Basic-Auth-header (`Authorization: Basic Ym9iOnNlcmhpaQ==`,
|
|
|
+decodeert naar `bob:serhii`, alleen nodig voor de
|
|
|
+`devbob.uitgaanskrant.com`-dev-omgeving) is nu uit alle 15 API-calls in
|
|
|
+`api_calls.dart` verwijderd via de Headers-tab per call — bevestigd via
|
|
|
+verse export: 0 treffers meer.)*
|
|
|
|
|
|
*(P0-7 afgerond 2026-08-13 avond — Bob, Drupal-kant: de kapotte
|
|
|
`flutterflowmobiel_establishment_info`-Views-`display` (`services_1`)
|
|
|
@@ -586,22 +573,30 @@ gezien de omvang hieronder (~45 treffers); pak het file-voor-file op.
|
|
|
aanpassen lost daar de crash niet op, alleen de zichtbare tekst als
|
|
|
hij (na de P1-15-fix) wél verborgen wordt.
|
|
|
|
|
|
-**P1-15 · Eigenaar: Bob (builder — Claude geblokkeerd, zie hieronder).** Kapotte zichtbaarheids-conditie op de social-/
|
|
|
-contact-knoppen laat de app **crashen** bij tikken (niet alleen lelijke
|
|
|
+**P1-15 · Eigenaar: Bob.** Kapotte zichtbaarheids-conditie op de social-/
|
|
|
+contact-knoppen liet de app **crashen** bij tikken (niet alleen lelijke
|
|
|
tekst) — **vermoedelijke verklaring voor de herhaalde
|
|
|
`Invalid argument(s): No host specified in URI`-excepties** die
|
|
|
2026-08-07 in de live `flutter run`-log van de andere sessie
|
|
|
verschenen (naast de al bekende P1-13-overflows, niet met elkaar
|
|
|
verwarren — twee losse foutmeldingen in dezelfde log).
|
|
|
-- **Root cause bevestigd (code-niveau,
|
|
|
- `lib/evenement/evenement_horecagelegenheid/evenement_horecagelegenheid_widget.dart`):**
|
|
|
- de Facebook- (r. 812-829), Instagram- (879-896), Twitter- (~946-961),
|
|
|
- Website- (1010-1027) en urluk-knop (1077-1094) zijn elk gewrapt in
|
|
|
+
|
|
|
+*(De oorspronkelijke 5 knoppen zijn afgerond 2026-08-14 — live
|
|
|
+pair-sessie, Bob builder, bevestigd via verse export: Facebook,
|
|
|
+Instagram, Twitter, Website en urluk op
|
|
|
+`evenement_horecagelegenheid_widget.dart` staan nu allemaal op
|
|
|
+`EstablishmentInfoCall.establishment<Veld>(...) != null && ... != ''`
|
|
|
+i.p.v. de kapotte `valueOrDefault`-conditie. Onderweg 1x dezelfde
|
|
|
+omgekeerde-operator-fout gevonden en gecorrigeerd op urluk als bij
|
|
|
+P0-8 die dag. **3 restpunten uit de bredere audit hieronder blijven
|
|
|
+open** — dit zijn andere bestanden/knoppen, niet meegenomen in deze
|
|
|
+ronde.)*
|
|
|
+- **Root cause (destijds, voor de context):**
|
|
|
`if (valueOrDefault<String>(<veld>, '<placeholder>') != null &&
|
|
|
valueOrDefault<String>(...) != '')`. Omdat `valueOrDefault` bij een
|
|
|
lege/ontbrekende bron altijd de placeholder-tekst teruggeeft (nooit
|
|
|
- `null`/`''`), is deze conditie **altijd waar** — de knop is dus altijd
|
|
|
- zichtbaar én tikbaar, ook zonder échte link. Bij tikken roept
|
|
|
+ `null`/`''`), was deze conditie **altijd waar** — de knop dus altijd
|
|
|
+ zichtbaar én tikbaar, ook zonder échte link. Bij tikken riep
|
|
|
`onTap` `launchURL(valueOrDefault<String>(...))` aan
|
|
|
(`lib/flutter_flow/flutter_flow_util.dart:61`, `Uri.parse(url)` →
|
|
|
`launchUrl(uri)`) met de kale placeholder-string (bv. `'facebook'`,
|
|
|
@@ -609,14 +604,7 @@ verwarren — twee losse foutmeldingen in dezelfde log).
|
|
|
crash. Hetzelfde broken-guard-patroon staat ook op de Telefoon-tekst
|
|
|
(r. 571-588) maar die crasht niet (geen `launchURL`, alleen
|
|
|
`Text`) — daar is het wél puur het P1-6-cosmetica-probleem.
|
|
|
-- **Fix (builder):** op elk van de 5 knoppen de Visibility/If-conditie
|
|
|
- **niet** tegen de `valueOrDefault`-uitkomst laten toetsen, maar tegen
|
|
|
- het **rale API-veld zelf** (dezelfde JSON Path-expressie als de
|
|
|
- Image-URL-fix in `CLAUDE.md`, operator **"Is Set"** i.p.v.
|
|
|
- `!= null && != ''`) — zelfde patroon als het al gedocumenteerde
|
|
|
- `CachedNetworkImage`-fix-recept. Zonder deze fix blijft ook een
|
|
|
- betere Default-Value-tekst (P1-6) een tikbare crash-knop.
|
|
|
-- **Bredere codebase-audit afgerond (2026-08-13, Claude, `grep` op alle
|
|
|
+- **Nog open — 3 losse plekken uit de bredere audit (2026-08-13, Claude, `grep` op alle
|
|
|
`launchURL(`-aanroepen buiten `lib/flutter_flow/`) — scope is groter
|
|
|
dan de 5 al bekende knoppen, en erger op 2 nieuwe plekken (géén
|
|
|
guard, zelfs niet de kapotte):**
|
|
|
@@ -675,40 +663,6 @@ verwarren — twee losse foutmeldingen in dezelfde log).
|
|
|
Home-vervolgpagina) via `evenement_info_widget.dart:268` hierboven —
|
|
|
dat verklaart het waargenomen symptoom net zo goed zonder een aparte
|
|
|
Home-specifieke plek nodig te hebben. Niet verder gezocht.
|
|
|
-- **Poging door Claude (2026-08-09 avond), geblokkeerd op
|
|
|
- Widget-Tree-coördinaten — geen wijziging aangebracht.** Component
|
|
|
- `EvenementHorecagelegenheid` geopend, maar de 5 knoppen (diep genest
|
|
|
- onder TabBar → TabBarPageInfo) bleken niet betrouwbaar te bereiken:
|
|
|
- klik-coördinaten op een zichtbare tree-rij selecteerden herhaaldelijk
|
|
|
- een andere rij, en de offset was **niet constant** (eerste meting
|
|
|
- +42px, twee stappen later +21px) — dus geen vaste correctie toe te
|
|
|
- passen zoals CLAUDE.md's kalibratietruc suggereert. De "Search for
|
|
|
- widget..."-zoekbalk in het paneel pakte maar één keer focus (na een
|
|
|
- klik op het "collapse"-icoontje ernaast), en zelfs toen gaf zoeken op
|
|
|
- `Facebook` geen enkel resultaat (wijst erop dat de knoppen intern
|
|
|
- niet zo genoemd zijn — zoek in de builder dus niet blind op die
|
|
|
- letterlijke naam).
|
|
|
-- **Poging door Bob (2026-08-10 avond), alle 5 knoppen ingesteld —
|
|
|
- bleek bij verse export toch niet toegepast.** Bob zette op alle 5
|
|
|
- knoppen de conditie om (naar eigen zeggen), maar een export vlak
|
|
|
- erna toonde voor in ieder geval de Facebook-knop nog exact het oude
|
|
|
- patroon (`valueOrDefault<String>(EstablishmentInfoCall.establishmentFacebook(...), 'facebook') != null && ... != ''`,
|
|
|
- regel 812 van `evenement_horecagelegenheid_widget.dart`) — dus de
|
|
|
- edit hield niet vast, zelfde "ziet er goed uit in de builder maar
|
|
|
- komt niet door" patroon als eerder bij P0-3 punt 1. **Nuttige
|
|
|
- precisering deze sessie:** de Facebook-waarde komt hier niet via een
|
|
|
- Component Parameter binnen, maar rechtstreeks uit een API-call die
|
|
|
- dit component zelf al draait (`EstablishmentInfoCall.establishmentFacebook(columnEstablishmentInfoResponse.jsonBody)`)
|
|
|
- — dus geen Component-Parameter-Default-Value-omweg nodig. Bind First
|
|
|
- Value in de Visibility-conditie direct aan die API-call-respons (in
|
|
|
- de builder waarschijnlijk zichtbaar als een bronnaam als
|
|
|
- "columnEstablishmentInfoResponse"/"Establishment Info Response" →
|
|
|
- veld "Facebook"), operator **"Is Set and Not Empty"**, zonder de
|
|
|
- `valueOrDefault`-wrap. Bob gaat hier zelfstandig mee verder. **Tip
|
|
|
- voor de volgende poging:** ná het instellen even wegnavigeren en de
|
|
|
- conditie opnieuw openen om te bevestigen dat hij écht bewaard is,
|
|
|
- vóórdat je naar de volgende knop gaat — dat had dit keer de vroege
|
|
|
- ontdekking gescheeld.
|
|
|
|
|
|
**P1-16 · Eigenaar: Bob (Firebase-koppeling is account-/builder-niveau,
|
|
|
geen Claude-taak).** Geen crash-reporting/analytics (bv. Firebase
|