Selaa lähdekoodia

TASKS/CLAUDE: taak 98 (agenda-knop) opgezet + permissieveld-valkuil vastgelegd

- 98: "Zet in mijn agenda"-knop via add_2_calendar, geclaimd door Claude
- 98A (Bob): ISO start/eind aan flutterflow_events services_1
- 98B (Bob): Calendar-permissietekst — Claude kan dat veld niet zetten
- CLAUDE.md: App Settings -> Permissions slaat elke toetsaanslag op als
  aparte plist-entry (69 dubbele NSCalendarsUsageDescription keys gemeten);
  toggle uitzetten ruimt alles op

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 6 tuntia sitten
vanhempi
commit
4591faead0
2 muutettua tiedostoa jossa 72 lisäystä ja 0 poistoa
  1. 23 0
      CLAUDE.md
  2. 49 0
      TASKS.md

+ 23 - 0
CLAUDE.md

@@ -3650,6 +3650,29 @@ testwaarde (bv. Cookie-header) kan per ongeluk blijven staan i.p.v.
 "Include"-vinkje in Response & Test — staat die uit, dan wordt de
 letterlijke `[varname]`-tekst meegestuurd i.p.v. de testwaarde.
 
+**⚠️ App Settings → Permissions: het "Permission Message"-veld slaat ELKE
+TOETSAANSLAG op als een aparte plist-entry — en dat is alleen in de export
+zichtbaar.** Bevestigd 2026-09-19 (taak 98, Calendar-permissie), drie keer
+gereproduceerd. De UI toont netjes één rij met de volledige zin; een verse
+export gaf **69 keys** `NSCalendarsUsageDescription` achter elkaar: `D`, `De`,
+`Dez`, … tot de volledige zin. Een plist met dubbele keys is ongeldig, dus dit
+breekt de iOS-build zonder dat de builder er iets over zegt.
+- Het veld gedraagt zich verder onvoorspelbaar: soms toont het na wegklikken de
+  volledige tekst, soms valt het terug op één letter — maar de export bevat in
+  béide gevallen de hele prefix-reeks. **Geloof dit veld dus nooit op wat het
+  toont.**
+- `ctrl+a` vóór het typen maakt het erger (de oude waarde blijft dan óók als
+  losse entries staan); `triple_click` + direct typen scheelt niets aan het
+  prefix-probleem zelf.
+- **Opruimen gaat wél schoon:** de toggle van die permissie uitzetten haalt
+  álle entries van dat type weg (geverifieerd: 69 → 0). Doe dat dus meteen als
+  je dit veroorzaakt hebt, en laat het project niet in die staat achter.
+- **Vuistregel: permissie-teksten zijn voor Claude niet te zetten — overdragen
+  aan Bob**, en hem laten controleren met
+  `grep -c "UsageDescription" ios/Runner/Info.plist` op een verse export (dat
+  hoort gelijk te zijn aan het aantal aangezette permissies). Onbekend of zijn
+  eigen browser hetzelfde doet; dat is de eerste vraag als hij het oppakt.
+
 **Custom Code-editor (Custom Functions/Widgets/Actions): tekst-editor,
 betrouwbaar te bewerken — maar wijziging verschijnt pas in een export
 ná een expliciete Ctrl+S.** In tegenstelling tot widget-canvas/

+ 49 - 0
TASKS.md

@@ -20,6 +20,7 @@ oppakken.
 | # | Taak | Kort |
 |---|---|---|
 | ~~88B~~ | Pagina "Mijn aanmeldingen" | ⚠️ **Al geclaimd** door de sessie 'taken-B1-B7' — niet oppakken |
+| **98** | "Zet in mijn agenda"-knop op een evenement (`add_2_calendar`) | Claude — **BEZIG** (sessie 2026-09-19). Blokkeert op Drupal-deel bij Bob, zie 98A |
 | **65** | Functionele doorloop van de release-build | Build draait al op emulator-5556; de checklist is nog niet afgelopen |
 | **P2-45b** | Datumkiezer annuleren → terug naar "Alles" (Bob's besluit 2026-09-19) | In de On-Pressed-keten van de kalenderknop op Home: de else-tak (`datePicked = getCurrentTimestamp`) vervangen door Update App State `datumFilter` → Clear Value, en de daaropvolgende `datumFilter = format(datePicked)` alleen in de gekozen-tak laten lopen. Nu: `home_widget.dart` r.401-410 |
 | **P2-24 B** | Categoriedropdown horeca-overzicht, tab-bewust (Bob 2026-09-19) | Custom function + dropdown op `horecagelegenhedenOverzichtCurrent`; zie P2-24 voor de hoofd-/subcategorie-nuance |
@@ -34,6 +35,8 @@ oppakken.
 | **B1** | **App-icoon: PNG 1024×1024, transparant, beeldmerk op ±60 %** | 🔴 Blokkeert. Op een toestel staat nu "itgaanskrant.co" |
 | **G** | Google Play-checklist G0–G4 | Volledige checklist hieronder, afvinkbaar |
 | **66** | Crashlytics: Firebase-console nakijken + Crashtest-knop opruimen | App-kant is bewezen (rapport met status 200); alleen de console-check en het opruimen zijn nog van jou |
+| **98A** | ISO-datum toevoegen aan `flutterflow_events` (2 velden) | 🔴 Blokkeert taak 98 — zonder start/eindtijd is er geen agenda-item te maken |
+| **98B** | Calendar-permissietekst in App Settings → Permissions | Claude kan dit veld niet zetten (elke toetsaanslag wordt een plist-entry); 10 seconden werk voor jou |
 | **P1-17** | Engelse vertalingen, één ronde | 46 velden op de twee aanmaakpagina's + 3 losse |
 | **Bij livegang** | Zes schakelaars en opruimklussen | Eigen blok hieronder |
 | **Drupal** | taak 56, P2-25 | Eigen blokken hieronder (P1-42/P1-43 zijn af, nagemeten 2026-09-19) |
@@ -130,6 +133,52 @@ export met een generieke 400 (zie `CLAUDE.md`) — loopt dat vast, dan is het ee
 Bob-stukje. (2) `stadsactiviteitAanmaken` heeft exact hetzelfde formulier­patroon;
 bouw eerst evenementen helemaal af en kopieer daarna pas, niet allebei tegelijk.
 
+---
+
+### 🆕 98 · "Zet in mijn agenda"-knop op een evenement · Claude — **BEZIG** (2026-09-19)
+
+Knop op `EventCurrent` die het evenement in de agenda van de telefoon zet, via
+het pub-pakket **`add_2_calendar` 3.1.1** (160/160 pub points, 364 likes, 134k
+downloads/maand, MIT). Zelf bouwen kan niet: iOS vereist EventKit in Swift via
+een platform channel, en dat kan FlutterFlow's Custom Code niet.
+
+**Blokkeert op 98A** — `flutterflow_events` levert alleen `datum` als
+Nederlandse weergavestring (`zaterdag 19 sep, 9:00`): geen jaartal, geen
+eindtijd. Gemeten op nid 214439, 2026-09-19.
+
+Stappen:
+1. **98A** (Bob, Drupal) — ISO start/eind aan de view toevoegen.
+2. ✅ **iOS-permissie uitgezocht (Claude, 2026-09-19): FlutterFlow heeft
+   gewoon een "Calendar"-rij** in App Settings → Permissions, dus de plist is
+   te regelen. ⚠️ **Maar het tekstveld ernaast is voor Claude onbruikbaar** —
+   het slaat elke toetsaanslag op als eigen plist-entry (69 dubbele keys in de
+   export, breekt de iOS-build). Zie de nieuwe notitie in `CLAUDE.md`. Het
+   project is weer schoon achtergelaten (permissie uit, 0 keys).
+   👉 **Overgedragen aan Bob — zie 98B.** Android heeft niets nodig.
+3. Dependency `add_2_calendar: ^3.1.1` in Custom Code → Dependencies.
+4. Custom action `zetInAgenda(titel, start, eind, locatie, omschrijving)`.
+5. Knop op `EventCurrent`, argumenten binden aan de nieuwe ISO-velden.
+
+### 🆕 98B · Calendar-permissietekst zetten · Eigenaar: Bob (builder)
+
+App Settings → Permissions → rij **Calendar**: toggle aan en als bericht
+`Deze app vraagt toegang tot je agenda om een evenement toe te voegen.`
+Controleer daarna op een **verse export**:
+`grep -c "UsageDescription" ios/Runner/Info.plist` → moet **3** geven (Camera,
+PhotoLibrary, Calendar). Geeft het er tientallen, dan heeft jouw browser
+hetzelfde per-toetsaanslag-probleem als Claude's; zet de toggle dan weer uit
+(dat ruimt alles op) en meld het — dan is het een FlutterFlow-bug en moeten we
+de plist-regel anders regelen.
+
+### 🆕 98A · ISO-datum aan `flutterflow_events` · Eigenaar: Bob (Drupal)
+
+Zie de losse instructie in de sessie; twee velden op **display `services_1`**
+van de view `flutterflow_events`, labels exact `datum_iso` en `datum_eind_iso`,
+formaat `Y-m-d H:i:s` in Europe/Amsterdam (dus lokale tijd, net als wat de
+create-actie verstuurt). Daarna `cc all` **en** de Cloudflare-cache purgen —
+dit endpoint zit in de 5-minuten Cache Rule.
+
+
 ### 🔧 Kleine open restpunten (app)
 
 - **P2-45b · annuleren van de datumkiezer · Eigenaar: Claude (besluit