ソースを参照

Taak 103: header-locatie + "(gemeente)" strippen, met metingen

iOS definitief afgevoerd (Bob 2026-09-19): eerst Android.

Twee metingen die samen een voorstel vormen:
- HeaderButtonsComponent bindt hard aan gemeenteSelectNaam; provincieSelectName
  wordt 3x gezet en 0x getoond. Home is landelijk (geen townid) en de
  provincie-menu-items gaan naar dezelfde pagina als de gemeente-items, dus de
  header klopt op twee plekken niet.
- 385 gemeenten uitgelezen: 235x "(gemeente)", 148x geen haakjes, 2x
  "(gemeente NH/LB)" - die laatste twee zijn betekenisvol (twee Bergens), dus
  kaal strippen geeft duplicaten.

Voorstel A strip in Drupal (raakt dropdown en header tegelijk), voorstel B geeft
de header twee optionele parameters zodat 17 van de 19 pagina's ongemoeid blijven.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 8 時間 前
コミット
502f28e140
1 ファイル変更89 行追加2 行削除
  1. 89 2
      TASKS.md

+ 89 - 2
TASKS.md

@@ -340,6 +340,92 @@ met het logo op ~55 % van de breedte op een **transparant** vlak, dan doet
 
 ---
 
+### 🆕 103 · Header toont de verkeerde locatie + "(gemeente)" weg · Eigenaar: Bob (keuze) → Claude (bouwen)
+
+Twee dingen die dezelfde `Text` in `HeaderButtonsComponent` raken; daarom samen.
+Ontdekt tijdens het schieten van de Play-screenshots (2026-09-19).
+
+**Meting 1 — de header toont ALTIJD de gemeentenaam.** `HeaderButtonsComponent`
+regel 239 bindt hard aan `FFAppState().gemeenteSelectNaam`. En:
+`provincieSelectName` wordt in de hele levende code **wel gezet, nergens
+getoond** (3 schrijfplekken, 0 leesplekken). Antwoord op Bob's vraag "staat er bij
+provincie wel provincie?": **nee.**
+
+Waar dat misgaat:
+| pagina | content is | header zegt |
+|---|---|---|
+| **Home** | **landelijk** — geeft alleen `displayid` door, géén `townid` | `Amsterdam (gemeente)` ❌ |
+| **PUitgaanPage via Provincie-menu** | provincie (`plaats: provincieSelectId`) | `Amsterdam (gemeente)` ❌ |
+| PUitgaanPage via Gemeente-menu | gemeente | klopt ✅ |
+| horeca, detailpagina's | gemeente | klopt ✅ |
+
+Beide menugroepen gaan naar **dezelfde** pagina (`PUitgaanPage`), alleen met een
+andere `plaats`-parameter — die pagina weet dus zelf niet wat hij toont.
+
+**Meting 2 — "(gemeente)" zit NIET op alle namen.** Alle 12 provincies uitgelezen,
+385 gemeenten:
+- **235x** exact `" (gemeente)"` → kan schoon weg
+- **148x** helemaal geen haakjes (Almere, Noordoostpolder, Aa en Hunze)
+- **2x** `" (gemeente NH)"` / `" (gemeente LB)"` — ⚠️ **die suffix is betekenisvol**:
+  er zijn twee gemeenten Bergen. Kaal strippen geeft twee identieke regels in de
+  dropdown.
+
+---
+
+**VOORSTEL A — "(gemeente)" weg. In Drupal, niet in de app.**
+
+Eén bewerking op `gemeentename` in `plaatsen.json`:
+- `" (gemeente)"` -> `""` (235 namen)
+- `" (gemeente "` -> `" ("` (2 namen: `Bergen (gemeente NH)` -> `Bergen (NH)`)
+- de 148 zonder haakjes blijven ongemoeid
+
+*Waarom aan de Drupal-kant:* de naam wordt op twee plekken getoond (de
+gemeente-dropdown én de header) maar komt uit één bron. Eén functie daar dekt
+allebei, en er komt geen custom function bij die Claude later niet meer mag
+weggooien. Kost geen app-wijziging en geen export.
+⚠️ `gemeenteSelectNaam` staat in secure storage, dus een bestaande installatie
+houdt de oude naam tot de gebruiker opnieuw kiest. Bij een nog niet gepubliceerde
+app irrelevant.
+
+**VOORSTEL B — de header laten kloppen. 2 pagina's, niet 19.**
+
+De header staat op **19** pagina's; de truc is dat de defaults de overige 17
+ongemoeid laten.
+
+1. Twee **optionele** parameters op `HeaderButtonsComponent`:
+   `landelijk` (Boolean, **default false**) en `plaatsId` (String, optioneel).
+2. Eén custom function, plat geschreven (geen geneste closures — zie `CLAUDE.md`):
+   ```dart
+   String headerLocatie(bool? landelijk, String? plaatsId, String? provincieId,
+                        String? provincieNaam, String? gemeenteNaam) {
+     if (landelijk == true) return 'Heel Nederland';
+     if (plaatsId != null && plaatsId.isNotEmpty &&
+         plaatsId == provincieId &&
+         provincieNaam != null && provincieNaam.isNotEmpty) return provincieNaam;
+     if (gemeenteNaam != null && gemeenteNaam.isNotEmpty) return gemeenteNaam;
+     return 'Kies je gemeente';
+   }
+   ```
+   5 argumenten — precies de grens die volgens `CLAUDE.md` bewezen volledig
+   bereikbaar is in "Set Function Arguments".
+3. Binden op de `Text` in de header (vervangt de huidige `valueOrDefault`).
+4. **Home**: `landelijk` = true. **PUitgaanPage**: `plaatsId` = de bestaande page
+   parameter `plaats`. Verder niets.
+
+Resultaat: Home -> *Heel Nederland* · Provincie-menu -> *Noord-Holland* ·
+Gemeente-menu en alle andere pagina's -> *Amsterdam* · niets gekozen ->
+*Kies je gemeente*.
+
+⚠️ **Eerlijke kanttekening:** "Heel Nederland" komt uit een custom function en
+gaat dus **niet** door `FFLocalizations` — in de Engelse modus blijft die ene
+tekst Nederlands. Zelfde categorie als 65e; hoort bij P1-17.
+
+**Goedkopere variant als B te veel is:** alleen `landelijk` doen (1 parameter,
+1 pagina, geen `plaatsId`). Dan klopt Home — het scherm dat iedereen als eerste
+ziet — en blijft alleen het provincie-geval scheef.
+
+---
+
 ### 🔧 Kleine open restpunten (app)
 
 *(P2-45b, P2-45c en 76 zijn op 2026-09-19 afgerond en geverifieerd met een
@@ -383,8 +469,9 @@ die twee niet meer los afwerken. Vink hier af.*
       Play service-account-JSON; pas doen als handmatig uploaden gaat vervelen.
       ⚠️ Blijft staan als G4.3: controleer het icoon op het AAB dat je uploadt.
 - [x] **G0.4 — ✅ BESLOTEN (Bob, 2026-09-19): alleen Android, iOS later.**
-      Wat iOS extra zou kosten staat in het blok "iOS — wat er extra bij komt"
-      onderaan deze checklist.
+      **Bob 2026-09-19, definitief:** *"fuck ios. we gaan eerst een android app
+      bouwen. Als die geld oplevert, gaan we naar apple."* Niet opnieuw agenderen;
+      wat het zou kosten staat in het blok "iOS — wat er extra bij komt".
 - [x] **G0.5 — ✅ CONCEPT KLAAR (Claude, 2026-09-19), akkoord Bob.** Drie varianten
       korte omschrijving (70/75/71 tekens) + lange omschrijving (1585 van 4000),
       opgebouwd uit de echte functielijst (drawer + Home-tabs). Bob's aanvullingen