|
|
@@ -20,7 +20,6 @@ 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** (2026-09-19). 98A en 98B zijn af; alleen de knop op `EventCurrent` rest nog |
|
|
|
| **65** | Release-build doorloop | ✅ **Uitgelogde deel af 2026-09-19** (0 crashes; 65a, 65b en 65d-kleur opgelost; 65c + 65e open). Rest = ingelogd + Xiaomi → Bob |
|
|
|
| ~~P2-24 B~~ | Categoriedropdown horeca-overzicht | ✅ **AF 2026-09-19** (Claude, export-geverifieerd): opties+labels per tab, On Selected zet de page state, On Tab Change reset beide, hint "Alle categorieën", volle breedte |
|
|
|
| ~~99/100/101~~ | Loginvelden · drawer-logo · Crashlytics-console | ✅ **ALLE DRIE AF 2026-09-19** (export-geverifieerd). ⚠️ Crashtest-knop opruimen blijft open: staat op `Favorieten`, pagina van 88B |
|
|
|
@@ -150,134 +149,6 @@ 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 staat erin (Claude, 2026-09-19): `add_2_calendar: ^3.0.1`**
|
|
|
- via App Settings → Project Dependencies → Custom Pub Dependencies.
|
|
|
- ⚠️ **Niet ^3.1.1**: versies vanaf 3.1.0 eisen Dart >= 3.11, en dit project
|
|
|
- draait Flutter 3.35.7 / Dart 3.9.2. `pub get` lost 3.0.1 op.
|
|
|
-4. ✅ **Custom action `zetInAgenda` staat er** (Claude, 2026-09-19),
|
|
|
- `Future<bool>`, 5 argumenten (`titel`, `startIso`, `eindIso?`, `locatie?`,
|
|
|
- `omschrijving?`). Doet: ISO parsen, eindtijd = start + 2 uur als er geen is,
|
|
|
- HTML uit de omschrijving strippen en afkappen op 500 tekens, lege titel →
|
|
|
- "Evenement". Geverifieerd op een verse export: **0 analyse-errors** tegen het
|
|
|
- echte pakket.
|
|
|
-5. ✅ **Knop staat op `EventCurrent`** (Claude, 2026-09-19) — naast de bestaande
|
|
|
- deel-knop in de titel-`Row`, gemaakt door die `Tooltip > IconButton` te
|
|
|
- **dupliceren** (stijl en tooltip komen dan gratis mee). Icoon
|
|
|
- `Icons.event_available`, tooltip "Zet in mijn agenda". Bindingen, alle vijf
|
|
|
- geverifieerd op een verse export:
|
|
|
- `titel` -> `$[0].title` · `startIso` -> `$[0].datum_iso` · `eindIso` -> leeg
|
|
|
- · `locatie` -> `$[0].adres` · `omschrijving` -> `$[0].body` ·
|
|
|
- `plaats` -> `$[0].plaats`.
|
|
|
- **Plus (Bob 2026-09-19): `nid` -> page parameter `nid`**, waarmee de action
|
|
|
- `https://uitgk.com/<nid>` bovenaan de omschrijving zet (het forward-domein
|
|
|
- dat doorstuurt naar `uitgaanskrant.com/node/<nid>`).
|
|
|
- **Bob's besluiten 2026-09-19: GEEN eindtijd** (de action zet `eind = start`,
|
|
|
- zodat de agenda-app zelf zijn standaardduur kiest i.p.v. dat wij 2 uur
|
|
|
- verzinnen) en **locatie = adres + plaats** (de action voegt ze samen en slaat
|
|
|
- een leeg deel over, dus nooit een losse komma).
|
|
|
- **Geen Visibility-conditie** — gemeten op 300 productie-events: `datum_iso`
|
|
|
- en de andere velden zijn er altijd, dus de knop werkt altijd; een conditie
|
|
|
- zou alleen het P2-44-risico (bool-cast zonder null-check) introduceren.
|
|
|
-6. ⏳ **Laatste stap: één tik op een ECHT toestel** (Bob) — op beide AVD's niet
|
|
|
- te testen, zie hieronder.
|
|
|
-7. ✅ **Engelse tooltip gecorrigeerd** (2026-09-19): sleutel `e08zfyf3` stond op
|
|
|
- `en: "Share"` — geërfd van de gedupliceerde deel-knop (het bekende
|
|
|
- `Duplicate`-patroon, zie `CLAUDE.md`). Nu `en: "Add to my calendar"`,
|
|
|
- export-geverifieerd.
|
|
|
-
|
|
|
-**Wat wél bewezen is (profile-build, emulator-5554, 2026-09-19):** de knop
|
|
|
-rendert, een tik roept de action aan en die vuurt de juiste intent af
|
|
|
-(`act=android.intent.action.INSERT dat=content://com.android.calendar/…`).
|
|
|
-De app zelf geeft geen enkele fout en komt netjes terug op de voorgrond.
|
|
|
-⚠️ **Wat de AVD's niet kunnen:** hun AOSP-kalender is een kapotte stub — het
|
|
|
-manifest declareert `com.android.calendar/.EditEventActivity` mét de
|
|
|
-INSERT-filter (dus Android routeert de intent erheen), maar de klasse zit niet
|
|
|
-in de APK: `ClassNotFoundException`, de kalender-app crasht. Geldt voor
|
|
|
-**beide** AVD's (`cmd package resolve-activity` geeft op allebei "No activity
|
|
|
-found"). Emulator-defect, geen app-bug — maar de voorgevulde agenda-dialoog is
|
|
|
-daardoor alleen op een echt toestel te zien.
|
|
|
-
|
|
|
-### ✅ 98B · Calendar-permissietekst — AF (Bob, 2026-09-19)
|
|
|
-
|
|
|
-Verse export geeft precies 3 `UsageDescription`-keys, één `NSCalendarsUsageDescription`
|
|
|
-met de volledige zin. **Belangrijk nevenresultaat: het per-toetsaanslag-probleem
|
|
|
-dat Claude tegenkwam is Claude-specifiek, niet een FlutterFlow-bug** — zie de
|
|
|
-bijgewerkte notitie in `CLAUDE.md`.
|
|
|
-
|
|
|
-<details><summary>oorspronkelijke opdracht</summary>
|
|
|
-
|
|
|
-
|
|
|
-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.
|
|
|
-</details>
|
|
|
-
|
|
|
-### ✅ 98A · ISO-datum aan `flutterflow_events` — AF, STAAT OP PRODUCTIE (2026-09-19)
|
|
|
-
|
|
|
-Geverifieerd op productie mét én zonder cache-buster (dus cache geleegd):
|
|
|
-nid 214439 → `datum_iso: "2026-09-19 09:00"`, nid 222813 → `"2026-12-10 20:30"`.
|
|
|
-Repeat rule staat op *Hide*. Onderstaande devbob-meting blijft als naslag.
|
|
|
-
|
|
|
-
|
|
|
-Bob heeft veld `field_date_1` toegevoegd met label **`datum_iso`**, formatter
|
|
|
-Date and time → *custom*, format `Y-m-d H:i:s`, Display *Start date only*.
|
|
|
-**Geen eindtijd** (Bob's besluit 2026-09-19) — de custom action maakt er
|
|
|
-start + 2 uur van.
|
|
|
-
|
|
|
-**Getest door Claude op devbob (2026-09-19), 1200 unieke events gescand:**
|
|
|
-1200 schoon parseerbaar, 0 leeg, 0 afwijkend; de tijd komt exact overeen met
|
|
|
-het bestaande `datum`-veld, dus de tijdzone klopt.
|
|
|
-- ⚠️ **Let op: de output heeft GEEN seconden** (`2026-09-19 09:00`), ondanks
|
|
|
- `H:i:s` in het format — de Date-module strippt `s` omdat de granularity van
|
|
|
- `field_date` geen seconden kent. **Geen probleem:** `DateTime.tryParse` in
|
|
|
- `zetInAgenda` accepteert dat, en ook mét seconden en milliseconden
|
|
|
- (alle vier getest). Een leeg veld én het oude `datum`-formaat worden netjes
|
|
|
- geweigerd (`false`, geen crash).
|
|
|
-- ⚠️ **Restpuntje voor Bob:** het nieuwe veld staat op
|
|
|
- `'show_repeat_rule' => 'show'`, het bestaande `datum`-veld op `'hide'`. Bij
|
|
|
- een event mét herhaalregel plakt Date die tekst achter de waarde en is
|
|
|
- `datum_iso` onparseerbaar (gevolg is mild: knop doet niets). Geen van de 1200
|
|
|
- events heeft er nu een. **Zet 'm bij de productie-ronde op "Hide repeat
|
|
|
- rule".**
|
|
|
-
|
|
|
-**Nog te doen: naar productie**, daarna `drush cc all` **én** de Cloudflare-cache
|
|
|
-purgen (dit endpoint zit in de 5-minuten Cache Rule).
|
|
|
-
|
|
|
-
|
|
|
-### ✅ 99 · Na inloggen bleef je op het inlogscherm — OPGELOST (Claude, 2026-09-19)
|
|
|
-
|
|
|
-De Inloggen-knop op `login` deed `drupalLogin` + een snackbar en **navigeerde
|
|
|
-nergens heen**: in de hele actieketen stond geen enkele `goNamed`/`pushNamed`,
|
|
|
-dus je zag "Succesvol ingelogd!" en bleef staan waar je stond.
|
|
|
-**Fix:** in de TRUE-tak van de conditie (`resultDrupalLogin is set`), ná de
|
|
|
-snackbar, een **Navigate To → favorieten** met **Allow Back Navigation uit**.
|
|
|
-Export bevestigt `context.goNamed(FavorietenWidget.routeName);` binnen
|
|
|
-`if (_model.resultDrupalLogin != null)`, dus geen terugweg naar het inlogscherm.
|
|
|
-
|
|
|
### 🆕 102 · Ontbrekend asset + de asset-crash in Crashlytics · Eigenaar: Bob (upload) + Claude (meten)
|
|
|
|
|
|
**Gevonden 2026-09-19 dankzij de zojuist ontsloten Crashlytics.** Het dashboard
|
|
|
@@ -479,7 +350,6 @@ ziet — en blijft alleen het provincie-geval scheef.
|
|
|
verse export — zie de commit van die datum.)*
|
|
|
|
|
|
|
|
|
-
|
|
|
---
|
|
|
|
|
|
## 🅖 G · GOOGLE PLAY — volledige checklist · Eigenaar: Bob
|