Ver Fonte

Taak 91 en 87 af: uitleg op beide aanmaakpagina's + link naar /nl/ondernemers

- stadsactiviteitAanmaken: hulpregels Waar/Organisatie/Entree/Media,
  intro-blok, Titel */Datum * (NL+EN), export-geverifieerd, 0 errors
- uitgaansevenementAanmaken: intro-blok, hint 'Kies je horecagelegenheid *',
  linkregel 'Nog geen zaak aangemeld?' met Launch URL (taak 87 app-kant)
- CLAUDE.md: recept intro-blok + vier builder-valkuilen (sleep in gefilterde
  boom, tree-scroll-reset, Duplicate-tweede-poging, stijl-lijstpositie)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bob há 10 horas atrás
pai
commit
110bfff652
2 ficheiros alterados com 27 adições e 214 exclusões
  1. 27 0
      CLAUDE.md
  2. 0 214
      TASKS.md

+ 27 - 0
CLAUDE.md

@@ -835,6 +835,33 @@ achter elkaar gelukt op `uitgaansevenementAanmaken` (taak 91):
   (typen landt, maar de boom filtert niet meer). Een paginaherlaad herstelt het;
   blijf er niet op doorproberen.
 
+**Een `Text` als EERSTE kind van de buitenste pagina-Column zetten (intro-blok
+boven de eerste kaart) — recept, 2026-09-19 op beide aanmaakpagina's gelukt.**
+Dupliceer een bestaande hulpregel (dan heb je stijl + Alignment al), en sleep de
+kopie in de widget tree op de **buitenste `Column`-rij** → landt op positie 0.
+Daarna: Padding → uniform-icoontje → `16` (het veld blijft leeg tonen, de
+slider verschuift; de export gaf `EdgeInsets.all(16.0)`), Theme Text Style →
+Body Medium, en de EN-vertaling via de globe. Vier valkuilen die hier tijd
+kostten:
+- **Slepen in een GEFILTERDE boom landt niet; in de ongefilterde boom wel.**
+  Wis het filter vóór een `left_click_drag`.
+- **De boom scrollt na `Duplicate` naar de kopie en de root valt dan buiten
+  beeld — muiswiel en scrollbar doen niets.** Reset: typ de **root-naam** in het
+  tree-zoekveld (de boom past dan in het paneel, scroll springt naar 0) en wis
+  of vervang het filter daarna; de boom begint dan weer bij de root.
+- **`Duplicate` uit het contextmenu landt ongeveer de helft van de keren pas bij
+  de tweede poging.** Controleer op het **canvas** (staat de tekst twee keer?),
+  niet in de boom — die loopt na een duplicate vaak een ronde achter.
+- **De Theme-Text-Style-lijst opent op wisselende posities** (de huidige stijl
+  ligt op de dropdown-hoogte, de rest eromheen) en rendert pas na een hover.
+  Hover, `zoom`, en lees de y-positie af vóór je klikt; 1x werd zo Body Small
+  i.p.v. Body Medium gekozen. **Een stijl kiezen reset ook Text Color** naar de
+  themawaarde (Primary Text) — zet de kleur dus ná de stijl.
+- Een `Launch URL`-actie op een `Text`: Actions-tab → Add Action → zoek
+  `Launch URL` (categorie Share) → het URL-veld wil een klik in aanroep A en
+  het typen in aanroep B, en commit met een klik op een label (Tab wiste de
+  waarde). Export: `InkWell(onTap: () async { await launchURL('...') })`.
+
 **"Combine Text" werkt gewoon als bron in "Set from Variable" — twee variabelen
 en een letterlijke tekst in één `Text`.** Bevestigd 2026-09-17 (P1-54,
 `EvenementInfo`): Text-waarde → potlood → zoek `Combine` → klik de bronregel

+ 0 - 214
TASKS.md

@@ -19,8 +19,6 @@ oppakken.
 
 | # | Taak | Kort |
 |---|---|---|
-| **91** | Uitleg op de aanmaakpagina's — **bezig (Claude, sessie 2026-09-19 taak 91/87)** | Pagina A op 3 restpunten na af; pagina B 4 van 7 secties open. Volledig recept + teksten hieronder. **Begin hier.** |
-| **87** | Klikbare link naar `/nl/ondernemers` — **bezig (Claude, samen met 91)** | Eén `Text` in linkstijl onder de horeca-dropdown; hoort bij 91 |
 | ~~88B~~ | Pagina "Mijn aanmeldingen" | ⚠️ **Al geclaimd** door de sessie 'taken-B1-B7' — niet oppakken |
 | **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 |
@@ -43,218 +41,6 @@ oppakken.
 ---
 #
 
-### 🔄 91 · Uitleg op de aanmaakpagina's · Eigenaar: Claude (VRIJ — pagina A af, pagina B 3 van 7) — **bezig (sessie 2026-09-19, taak 91+87)**
-
-**✅ Klaar en export-geverifieerd 2026-09-18/19 op `uitgaansevenementAanmaken`**
-(`dart analyze` 0 errors): alle **zeven** hulpteksten staan er, elk direct ónder
-zijn sectiekop, in 12 px / `secondaryText`, mét Nederlandse én Engelse vertaling.
-Sleutels: `ohgppxt2` (Wat), `fbkrt89w` (Uw Horecagelegenheid), `j68hqlk7`
-(Categorie), `f8hii0ci` (Wanneer), `len3npim` (Organisatie), `rj9dgdp7` (Entree),
-`nvi2k89n` (Media). Ook gedaan: `Titel *` / `Title *` (`vc80d3lh`) en
-`Datum *` / `Date *` (`xceonmpt` — die stond in het Engels nog op "Datum", dus dit
-dicht meteen een P1-17-gat).
-
-**Nog open op pagina A (klein):**
-- het **intro-blok** bovenaan ("Meld hier een evenement aan bij een van je zaken.
-  Velden met * zijn verplicht. Je evenement staat direct online." / EN idem);
-- de `hintText` **`Kies je horecagelegenheid *`** (`nhnxstvm`);
-- **taak 87 deel 2**: één extra `Text` ónder de horeca-hulptekst, in linkstijl
-  (`secondary` + onderstreept) met een `Launch URL` naar
-  `https://uitgaanskrant.com/nl/ondernemers` — *"Nog geen zaak aangemeld? Dat doe
-  je op uitgaanskrant.com."* De sectieregel die er nu staat noemt die zin al, dus
-  hem weghalen zodra de link er staat.
-
-**Pagina B (`stadsactiviteitAanmaken`): 3 van de 7 secties af** —
-export-geverifieerd, `dart analyze` 0 errors. Klaar met NL+EN én stijl
-(`bodySmall` + `secondaryText`): `evhqyjou` (Wat), `i0ij4drx` (Categorie),
-`e1nwfbwv` (Wanneer). **Nog te doen op pagina B:** de vier hulpregels voor
-**Waar, Organisatie, Entree en Media**, het intro-blok, en `Titel *`
-(`xorq08j5`) + `Datum *` (`dfa8vusy`, EN staat daar nu nog op het Nederlandse
-"Datum" — meteen een P1-17-gat om te dichten). Teksten NL+EN staan
-kant-en-klaar in de tabel hieronder.
-
-#
-
-#### ⚙️ Werkend recept (Claude, 2026-09-18) — lees dit vóór je verdergaat
-
-Per sectie, en houd je aan de **losse tool-aanroepen**, anders gaat het mis:
-1. **Sectiekop selecteren** (twee kliks op dezelfde tree-rij; de eerste landt nooit).
-2. **Rechtsklik → Duplicate.** De kopie komt áltijd ná het origineel. ⚠️ Het
-   contextmenu klapt **omhoog** als de rij laag in het paneel staat — doe dus
-   rechtsklik + screenshot in één aanroep en klik *Duplicate* pas in de volgende,
-   op de positie die je van die screenshot afleest. Blind mikken op "+46 px" werkt
-   alleen als de rij hoog genoeg staat.
-3. **De kopie bewerken, niet het origineel.** Ververs eerst het tree-filter en
-   maak een verse `zoom` van de boom: hij verschuift tijdens het dupliceren, en
-   een klik op de oude y-positie pakt dan het origineel. Dat is in deze sessie
-   **drie keer** gebeurd (Categorie, Wanneer, Media) en kost telkens een
-   reparatieronde waarin je de twee teksten weer omwisselt.
-4. **Tekst zetten: `triple_click` in aanroep A, `ctrl+a` + `type` in aanroep B.**
-   Eén batch werkt niet — de eerste triple_click na een nieuwe selectie landt niet.
-5. ⚠️ **Het rechterpaneel toont ná een geslaagde wijziging vaak nog de oude waarde.**
-   Typ dus niet nog eens "omdat er niets lijkt te gebeuren": dan zet je de tekst op
-   twee widgets tegelijk. Controleer het **canvas**, niet het paneel.
-6. **Stijl in één klik: Theme Text Style → Body Small.** Dat zet ineens Roboto,
-   400 en 12 px goed (ook op de Entree-/Media-koppen, die `Headline Small` +
-   Noto Serif zijn). Daarna alleen nog Text Color → **Secondary Text**.
-   *Copy/Paste Widget Style uit het contextmenu werkt níet — niet opnieuw proberen.*
-7. **Vertaling:** globe-icoontje naast het label *Text* → English invullen → Back.
-   Een duplicaat erft de Engelse tekst van de kop, dus dit moet echt per widget.
-8. **Verifiëren met een verse export**, nooit met het paneel. Handig commando:
-   `grep -n "getText(" -A1 <widget>.dart | grep "/\*"` geeft alle teksten in
-   documentvolgorde, dus je ziet meteen of kop en hulptekst in de goede volgorde
-   staan.
-
-Twee dingen die deze sessie **niet** werkten en waar je geen tijd in moet steken:
-het **tree-zoekveld** raakte na ~20 minuten bewerken zijn filterfunctie kwijt
-(een paginaherlaad herstelt dat), en **Ctrl+D** / **Ctrl+Shift+C/V** doen niets.
-
-*(Oorspronkelijke opdracht en alle teksten hieronder ongewijzigd.)*
-
-
-Bob 2026-09-18: *"we moeten uitleg op de evenementen/activiteiten aanmaken
-pagina maken."* Nu staat er nergens wat verplicht is, wat een veld betekent, of
-wat er ná indienen gebeurt — de verplichte velden zijn alléén in de custom
-action afgedwongen (`evenementCreate` / `stadsactiviteitCreate`), dus de
-gebruiker ziet pas ná indienen *"Titel is verplicht"*.
-
-**Gekozen opzet (Bob akkoord):** intro-blok bovenaan + één regel hulptekst onder
-elke bestaande sectiekop + `*` achter de verplichte labels. Géén info-icoontjes
-met tooltip (op mobiel een extra tik, en je ziet niet dát er uitleg is), en géén
-losse lap tekst bovenaan (wordt weggescrold). Per-veld-uitleg (laag 3) en echte
-veldvalidatie vóór indienen zijn bewust buiten scope gehouden.
-
-**Bouwtechnisch:** losse `Text`-widgets, **géén** herbruikbaar component met een
-`tekst`-parameter — een parameterwaarde valt buiten het vertaalsysteem, een
-`Text` krijgt een eigen sleutel en is dus via het globe-icoontje te vertalen.
-Eén `Text` opmaken (stijl `bodySmall`, kleur `secondaryText`, 12px), dan
-`Duplicate` per sectie en in de kaart-`Column` direct ónder de sectiekop zetten.
-Reken op ±16 Text-widgets over beide pagina's.
-⚠️ **Een duplicaat erft de Engelse vertaling van het origineel** (zie P1-17) —
-zet de EN dus per widget opnieuw via het globe-icoontje, en verifieer met een
-verse export, niet met het paneel ("ziet er opgeslagen uit"-patroon).
-
-**Belangrijkste zin van de hele taak — de categorie.** Bob expliciet: de
-categorie bepaalt in welke overzichten het item terechtkomt. Dat is geen
-stijlpunt maar hard gedrag: `flutterflowmobiel1` verdeelt over displays
-services_1…7 per categorie, dus een item zónder categorie komt in **geen enkele
-tab** (dat was precies de bevinding van taak 28: 6 van de 7 onzichtbare events
-hadden geen categorie).
-
----
-
-**Stand per 2026-09-19, gemeten op een verse export (niet gebouwd, alleen geteld):**
-- **A:** 5 van de 7 sectieregels staan er — Wat, Uw Horecagelegenheid, Categorie,
-  Wanneer, Organisatie, alle vijf mét Engelse vertaling. **Nog te doen:** de
-  regels bij *Entree* en *Media*, het intro-blok, en de `*` achter `Titel`,
-  `Datum` en de hint `Kies je horecagelegenheid`.
-- **B:** nog niets van deze taak — 0 van de 7 regels, geen intro, geen `*`.
-
-#
-
-#### A · `uitgaansevenementAanmaken`
-
-**Intro-blok, bovenaan (boven de kaart "Wat"):**
-- NL: *Meld hier een evenement aan bij een van je zaken. Velden met * zijn verplicht. Je evenement staat direct online.*
-- EN: *Submit an event for one of your venues here. Fields marked * are required. Your event goes online right away.*
-
-**Regel onder elke sectiekop:**
-
-| Sectie | NL | EN |
-|---|---|---|
-| Wat | Geef een korte, herkenbare titel. De omschrijving verschijnt op de detailpagina van het evenement. | Give it a short, recognisable title. The description appears on the event's detail page. |
-| Uw Horecagelegenheid | Kies de zaak waar het evenement plaatsvindt. Je ziet hier alleen zaken die op jouw account staan. Nog geen zaak aangemeld? Dat doe je op uitgaanskrant.com. | Choose the venue where the event takes place. You only see venues linked to your account. No venue yet? You can add one on uitgaanskrant.com. |
-| Categorie evenement | Let op: de categorie bepaalt in welke overzichten je evenement verschijnt. Kies er minstens één — zonder categorie is je evenement nergens terug te vinden. | Note: the category decides which listings your event appears in. Pick at least one — without a category your event won't show up anywhere. |
-| Wanneer | De begindatum is verplicht. Vul een einddatum alleen in bij een evenement dat meerdere dagen duurt. | The start date is required. Only fill in an end date for an event that runs several days. |
-| Organisatie | Optioneel. Een website of ticketlink tonen we als knop bij je evenement. | Optional. A website or ticket link is shown as a button on your event. |
-| Entree | Laat leeg als er geen entree wordt geheven. Vul de prijs in als bedrag, bijvoorbeeld 7,50. | Leave empty if there's no admission charge. Enter the price as an amount, for example 7.50. |
-| Media | Eén logo en meerdere foto's. Tik nogmaals op "Foto's kiezen" om er een toe te voegen; de vorige blijft staan. | One logo and several photos. Tap "Choose photos" again to add another; the previous one stays. |
-
-**Verplicht markeren met `*`** (verplicht volgens `evenementCreate`:
-horecagelegenheid, titel, datum-start):
-- `labelText` `Titel` (`vc80d3lh`) → `Titel *`
-- `labelText` `Datum` (`xceonmpt`) → `Datum *`
-- `hintText` `Kies je horecagelegenheid` (`nhnxstvm`) → `Kies je horecagelegenheid *`
-
-De regel bij "Uw Horecagelegenheid" overlapt bewust met **taak 87** — bouw die
-twee samen, dan is één van beide de link-variant (`Launch URL` naar
-`https://uitgaanskrant.com/nl/ondernemers`) en hoeft de zin er niet twee keer
-te staan.
-
----
-
-#
-
-#### B · `stadsactiviteitAanmaken`
-
-**Intro-blok, bovenaan:**
-- NL: *Meld hier een activiteit aan in jouw gemeente. Velden met * zijn verplicht. Heb je stadsredacteur-rechten voor deze plaats, dan staat je activiteit direct online; anders kijken we hem eerst na.*
-- EN: *Submit an activity in your municipality here. Fields marked * are required. If you have city editor rights for this town your activity goes online right away; otherwise we review it first.*
-
-**Regel onder elke sectiekop:**
-
-| Sectie | NL | EN |
-|---|---|---|
-| Wat | Geef een korte, herkenbare titel. De omschrijving verschijnt op de detailpagina van de activiteit. | Give it a short, recognisable title. The description appears on the activity's detail page. |
-| Categorie evenement | Let op: de categorie bepaalt in welke overzichten je activiteit verschijnt. Kies er minstens één — zonder categorie is je activiteit nergens terug te vinden. | Note: the category decides which listings your activity appears in. Pick at least one — without a category your activity won't show up anywhere. |
-| Wanneer | De begindatum is verplicht. Vul een einddatum alleen in bij een activiteit die meerdere dagen duurt. | The start date is required. Only fill in an end date for an activity that runs several days. |
-| Waar | Kies eerst de plaats waar de activiteit plaatsvindt — dat is verplicht. Adres, postcode en plaatsnaam daaronder zijn het bezoekadres en optioneel. | First choose the town where the activity takes place — that one is required. The address, postcode and town name below are the visiting address and optional. |
-| Organisatie | Optioneel. De naam van de organisator en een contactadres of website waar bezoekers terechtkunnen. | Optional. The organiser's name and a contact address or website for visitors. |
-| Entree | Laat leeg als er geen entree wordt geheven. Vul de prijs in als bedrag, bijvoorbeeld 7,50. | Leave empty if there's no admission charge. Enter the price as an amount, for example 7.50. |
-| Media | Eén logo en meerdere foto's. Tik nogmaals op "Foto's kiezen" om er een toe te voegen; de vorige blijft staan. | One logo and several photos. Tap "Choose photos" again to add another; the previous one stays. |
-
-**Verplicht markeren met `*`** (verplicht volgens `stadsactiviteitCreate`:
-titel, plaats-tid, datum-start):
-- `labelText` `Titel` (`xorq08j5`) → `Titel *`
-- `labelText` `Datum` (`dfa8vusy`) → `Datum *`
-- **Géén `*` op de vier Waar-dropdowns** — welke van de twee routes ("Mijn
-  gemeenten" óf de cascade provincie/gemeente/plaats) je gebruikt is vrij; de
-  sectieregel hierboven zegt daarom dat de plaats verplicht is.
-
-⚠️ **Verwarring die de sectieregel bij "Waar" bewust opheldert:** er staan hier
-twee dingen die "plaats" heten. De verplichte waarde is de **plaats-tid** uit de
-dropdowns (`createPlaatsID`); het tekstveld met label **Plaats** (`825wzmk4`,
-hint *Plaats activiteit*) is gewoon een regel van het bezoekadres en is
-optioneel.
----
-
-#
-
-### 🆕 87 · Uitleggen waar je een horecagelegenheid aanmaakt — kan alleen via de website · Eigenaar: Claude (app-kant — de sectieregel staat er al, alleen de klikbare link ontbreekt nog; zie taak 91). **Deel 1 (helppagina-link, Drupal) is af — Bob 2026-09-19.**
-
-Bob 2026-09-17: *"we moeten nog ergens kwijt dat we uitleggen waar je een
-horecagelegenheid kunt aanmaken. Kan alleen via de website."* Nu staat dat
-nergens — niet in de app en niet op de helppagina.
-
-**Waarom dit er echt toe doet:** `uitgaansevenementAanmaken` heeft een dropdown
-**"Uw Horecagelegenheid"** (sleutel `rqx6m3yf`) die gevuld wordt uit
-`mijn_horecagelegenheden`. Wie nog geen zaak heeft, ziet daar een **lege
-dropdown** en kan dus geen evenement indienen — zonder dat er ook maar iets
-uitlegt waarom, of wat hij dan wél moet doen. Dat is nu een doodlopende weg.
-
-Twee plekken, in deze volgorde:
-
-1. **Helppagina `/nl/support/mobieleapp` (Drupal, Bob).** Eigen kopje, bv. "Je
-   zaak aanmelden": een horecagelegenheid maak je aan op de website, niet in de
-   app; daarna verschijnt hij in de app onder *Uw Horecagelegenheid* en kun je er
-   evenementen bij indienen. **URL gevonden door Claude 2026-09-18:**
-   `https://uitgaanskrant.com/nl/ondernemers` (anoniem 200) — daar staat
-   "Hoe werkt het?" met account aanmaken → onderneming claimen óf toevoegen →
-   evenementen aanmaken, mét een link naar `/nl/node/add/horecagelegenheid`.
-   De helppagina heeft al de zin *"Horecagelegenheden toevoegen kan op dit moment
-   alleen via de website"*, maar **zonder link** — die zin moet dus alleen nog naar
-   `/nl/ondernemers` gaan wijzen. Bob bevestigt of dit de bedoelde pagina is.
-2. **In de app, onder de dropdown op `uitgaansevenementAanmaken` (Claude,
-   builder).** Eén `Text` onder de dropdown, stijl `secondary` + onderstreept
-   (zelfde als de andere links in de app), met een `Launch URL` naar die pagina:
-   *"Nog geen zaak aangemeld? Dat doe je op uitgaanskrant.com."* Engelse
-   vertaling meteen meegeven. Eventueel met een Visibility-conditie zodat hij
-   alleen verschijnt bij een lege lijst — maar hem altijd tonen mag ook en is
-   veel minder bouwwerk.
-
-Zelfde afweging geldt voor `stadsactiviteitAanmaken`: check bij het bouwen even
-of die pagina hetzelfde probleem heeft (stadsrechten i.p.v. een zaak).
-
 ### 🆕 88 · "Mijn aanmeldingen" + kloonknop · deel A ✅ AF · **deel B: Claude — BEZIG (sessie 'taken-B1-B7', 2026-09-19)**
 
 ⚠️ **Deel B is geclaimd — niet ook oppakken.** Deel A (beide Drupal-endpoints)