|
@@ -2544,3 +2544,86 @@ overwegen bij een volgende theme-update:
|
|
|
nodig, eerder een patroon om **naar de app te kopiëren** (zie
|
|
nodig, eerder een patroon om **naar de app te kopiëren** (zie
|
|
|
P2-11/P1-27: de app's hamburger is een klein rood knopje, minder
|
|
P2-11/P1-27: de app's hamburger is een klein rood knopje, minder
|
|
|
opvallend).
|
|
opvallend).
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+**P2-15 · Eigenaar: Bob (builder), Claude regisseert/verifieert —
|
|
|
|
|
+zelfde live pair-fix-aanpak als eerder.** Evenementen/stadsactiviteiten
|
|
|
|
|
+aanmaken vanuit de app (horeca-eigenaren + elke gebruiker). **Drupal-kant
|
|
|
|
|
+volledig klaar en curl-getest op devbob (2026-08-26)** — dit is nu
|
|
|
|
|
+zuiver FlutterFlow-bouwwerk. Volledige achtergrond/velden/beslissingen
|
|
|
|
|
+staan in het Artifact "Redactierechten & Contentschema"
|
|
|
|
|
+(`https://claude.ai/code/artifact/becb0c6f-e43b-4392-9f84-7dbf44eda5b2`,
|
|
|
|
|
+sectie "FlutterFlow-vervolgspec") — open dat eerst, hieronder alleen de
|
|
|
|
|
+samenvatting + concrete eerste bouwstappen.
|
|
|
|
|
+
|
|
|
|
|
+**Endpoints (allemaal bevestigd werkend):** `evenementen/create`,
|
|
|
|
|
+`stadsactiviteiten/create`, `mijn_horecagelegenheden` (index),
|
|
|
|
|
+`mijn_stadsrechten` (index), `categorieen` (index),
|
|
|
|
|
+`bestand_upload/upload`. Basis-auth (`bob:serhii`, zie lokale
|
|
|
|
|
+Claude-memory) nodig voor handmatig curl-testen, niet vanuit de app
|
|
|
|
|
+zelf.
|
|
|
|
|
+
|
|
|
|
|
+**Look & feel — bevindingen uit de bestaande app-code (geen browser
|
|
|
|
|
+gebruikt, puur codeonderzoek):**
|
|
|
|
|
+- **`HorecagelegenheidoverzichtKaartWidget`**
|
|
|
|
|
+ (`lib/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/`)
|
|
|
|
|
+ is al de kaart-widget die Favorieten Tab 2 gebruikt
|
|
|
|
|
+ (`favorieten_widget.dart:678`, in een `MasonryGridView.builder`) —
|
|
|
|
|
+ parameters (`nid`, `titel`, `adres`, `plaats`, `logo`, `categorie`)
|
|
|
|
|
+ matchen 1-op-1 met wat `mijn_horecagelegenheden` teruggeeft. **Gewoon
|
|
|
|
|
+ hergebruiken** voor de nieuwe "Mijn horecagelegenheden"-sectie, geen
|
|
|
|
|
+ nieuwe kaart-widget nodig.
|
|
|
|
|
+- **Geen bestaand upload-precedent in de app** (`grep` op
|
|
|
|
|
+ `ImagePicker`/media-upload buiten `custom_code/` gaf 0 treffers) —
|
|
|
|
|
+ de foto-upload-flow (image picker → bytes → base64 → nieuwe custom
|
|
|
|
|
+ action → `bestand_upload/upload` → fid) is de enige écht nieuwe
|
|
|
|
|
+ bouwsteen zonder bestaand patroon om te kopiëren. Grootste
|
|
|
|
|
+ onzekerheid in deze taak; begin hier apart mee testen vóór je de
|
|
|
|
|
+ hele formulier-pagina bouwt.
|
|
|
|
|
+- **Thema:** gewoon `FlutterFlowTheme.of(context)`-tokens overal
|
|
|
|
|
+ gebruiken (primary `#4B39EF`, secondary `#39D2C0`, tertiary
|
|
|
|
|
+ `#EE8B60`, font Inter/Inter Tight via Google Fonts) — geen eigen
|
|
|
|
|
+ palet nodig, sluit al aan bij de rest van de app.
|
|
|
|
|
+- **Waar leeft "mijn profiel"?** Er bestaat nu geen aparte
|
|
|
|
|
+ profiel-pagina — `FavorietenWidget` (`lib/favorieten/`) heeft een
|
|
|
|
|
+ 4e tab "Gebruiker" (`favorieten_widget.dart:245`) met een simpele
|
|
|
|
|
+ verticale lijst `ListTile`-rijen (Uitloggen, Wachtwoord wijzigen,
|
|
|
|
|
+ Account verwijderen — zie regel 700-935, patroon: `InkWell` →
|
|
|
|
|
+ `Material` → `ListTile` met `trailing: Icon(Icons.arrow_forward_ios_rounded)`,
|
|
|
|
|
+ `tileColor: secondaryBackground`, `borderRadius: 8.0`). **Aanbeveling:
|
|
|
|
|
+ nieuwe secties "Mijn horecagelegenheden" en "Mijn redactierechten"
|
|
|
|
|
+ hier bovenaan toevoegen** (vóór Uitloggen) i.p.v. een hele nieuwe
|
|
|
|
|
+ pagina + nav-entry te bouwen — kleinste wijziging, blijft binnen de
|
|
|
|
|
+ al bestaande "Gebruiker"-tab die feitelijk al de profielpagina is.
|
|
|
|
|
+ **Open vraag voor Bob:** akkoord met deze plek, of toch een losse
|
|
|
|
|
+ pagina? (zijn oorspronkelijke formulering was "de user profile
|
|
|
|
|
+ pagina, los van de favoriete pagina" — kan ook betekenen dat hij een
|
|
|
|
|
+ ECHT aparte pagina wil, niet nog een tab op dezelfde `FavorietenWidget`.)
|
|
|
|
|
+
|
|
|
|
|
+**Concrete bouwvolgorde (1 stap per keer, zoals gebruikelijk):**
|
|
|
|
|
+1. Custom action `bestand_upload` bouwen (image picker → base64 →
|
|
|
|
|
+ POST) en LOS testen (upload 1 plaatje, bevestig een fid terugkomt)
|
|
|
|
|
+ vóór er iets anders bijkomt.
|
|
|
|
|
+2. Pagina "Stadsactiviteit aanmaken" (simpelste van de twee — geen
|
|
|
|
|
+ eigenaarschap-gate, geen horecagelegenheid-picker): velden per de
|
|
|
|
|
+ Stadsactiviteit-tabel in het Artifact, plaats-picker (bestaand
|
|
|
|
|
+ patroon, zie `SelectStateDropDownComponent`/`Selectprovinciegemeente`),
|
|
|
|
|
+ categorie-multiselect via `categorieen/index`. Na indienen: melding
|
|
|
|
|
+ "wordt beoordeeld", niet "geplaatst".
|
|
|
|
|
+3. Pagina "Evenement aanmaken": horecagelegenheid-picker gevuld via
|
|
|
|
|
+ `mijn_horecagelegenheden` (auto-select bij precies 1 resultaat),
|
|
|
|
|
+ verder zelfde velden-aanpak als stap 2.
|
|
|
|
|
+4. "Gebruiker"-tab (of nieuwe pagina, zie open vraag hierboven):
|
|
|
|
|
+ sectie "Mijn horecagelegenheden" (hergebruik
|
|
|
|
|
+ `HorecagelegenheidoverzichtKaartWidget`) + "Mijn redactierechten"
|
|
|
|
|
+ (`mijn_stadsrechten`, verberg de sectie helemaal als leeg), elk met
|
|
|
|
|
+ een knop die naar stap 2/3 navigeert met een page-parameter
|
|
|
|
|
+ (`plaats_tid` resp. `horecagelegenheid_nid`) vooringevuld.
|
|
|
|
|
+
|
|
|
|
|
+**Nog te testen (restpunten uit de curl-ronde, niet kritiek maar wel
|
|
|
|
|
+before-launch de moeite waard):** `mijn_stadsrechten` met een
|
|
|
|
|
+niet-triviale gebruiker; `evenementen/create` met een horecagelegenheid
|
|
|
|
|
+die NIET van de ingelogde user is (moet 403 geven); >5 `fotos_fids`
|
|
|
|
|
+(moet 400 geven); een ongeldige `categorie_tid` (moet 400 geven, geen
|
|
|
|
|
+kale crash).
|