LEESMIJ.md 4.4 KB

Snippets

Custom code die via de FlutterFlow Custom Code-editor ingevoerd moet worden. Staat hier als .txt zodat flutter analyze en de export er niets mee doen — deze map ligt bewust buiten lib/ en overleeft daarom een export-code.

Plak bij het invoeren alles onder de // DO NOT REMOVE-regel — inclusief de eigen importregels die daar direct onder staan; de FlutterFlow-importkop erbóven genereert de builder zelf. In beide bestanden staat een ⬇ PLAK VANAF HIER ⬇-markering op precies de goede plek.

⚠️ Vergeet die importregel niet. Gebeurde 2026-09-13: zonder import 'package:http/http.dart' as http; slaat de Custom Code-editor de action gewoon op en meldt de builder niets, maar faalt de Gradle-build met Error: Undefined name 'http'. De editor controleert dit dus niet voor je.

  • check_verbinding.dart.txt — Custom Action checkVerbinding, Return Type Boolean, geen argumenten.
  • verbindings_banner.dart.txt — Custom Widget VerbindingsBanner, parameters width (double, optioneel), height (double, optioneel), tekst (String, optioneel). Laat die drie leeg bij het plaatsen.

⚠️ Het widget neemt bewust GEEN ruimte in de layout in (SizedBox.shrink) en toont de melding via de ScaffoldMessenger over de pagina heen. Reden: de header zit in een FlexibleSpaceBar.background met een vaste hoogte van 74 px. Zet het dus als laatste kind in de bestaande Row van HeaderButtonsComponent — niet in een Column eromheen en niet in een Container met een vaste hoogte. Zie de valkuil in TASKS.md.

Beide horen bij de verbindingsmelding in de header; de bouwstappen staan in TASKS.md.

Aanmaakpagina's (P2-29 / A3) — einddatum-controle

  • evenement_create.dart.txt — Custom Action evenementCreate, volledige code zoals hij nu in de builder staat plus één extra blok direct na de Datum is verplicht-controle: is de einddatum gevuld én ligt hij vóór de startdatum, dan komt {'success': false, 'error': 'De einddatum ligt vóór de startdatum'} terug. De app toont die tekst al in de bestaande snackbar; er hoeft aan de pagina niets te veranderen.
  • stadsactiviteit_create.dart.txt — idem voor stadsactiviteitCreate.

Argumenten, volgorde en return type blijven exact gelijk, dus de bestaande bindingen op ButtonIndienen blijven werken. Invoeren: Custom Code → action openen → Cancel/Discard is niet nodig, gewoon de hele body vervangen (alles onder // DO NOT REMOVE), Ctrl+S, en verifiëren met een verse export op de string einddatum ligt vóór.

Kopie-knop / klonen (taak 127)

  • kloonbron-drupal-patch.inc.txt — geen FlutterFlow-code, maar een patch voor custom.mijn_aanmeldingen.inc op de server (taak 127-A). Dicht drie gaten in aanmelding_kloonbron.json: het ontbrekende entree_tid bij een activiteit, logo_url/fotos_urls voor de preview, en de uitgeklapte plaatsketen (provincie_tid/gemeente_tid/keten) voor de cascade. Read-only getest op productie 2026-09-20, inclusief randgevallen.
  • kloon_functies.dart.txt — twee Custom Functions (kloonTekst, kloonLijst) die één veld uit App State kloonBron lezen. Beide met een non-nullable return, anders vult valueOrDefault een lege waarde op met de default.

⚠️ Het keten-formaat ("provincie|gemeente|plaats") is met opzet identiek aan dat van taak 123, zodat de custom functions ketenProvincie/ketenGemeente/ ketenPlaats uit taak 124 hergebruikt kunnen worden. Bouw ze niet twee keer.

Nieuwsbrieven (taak 128)

  • nieuwsbrieven-drupal.inc.txt — geen FlutterFlow-code, maar de volledige Drupal-kant van taak 128-A: het nieuwe bestand custom.nieuwsbrieven.inc, het blok voor custom_services_resources(), de deploystappen en een voorbeeldrespons. Geeft de app drie endpoints om nieuwsbrieven aan en uit te zetten (simplenews).

⚠️ Lees het blok "TEST EERST OF DIE BEVESTIGINGSMAIL AANKOMT" vóór je deployt. Van 450 anonieme inschrijvingen is er in tien jaar geen enkele bevestigd; zolang dat niet verklaard is, kan de bevestigingsroute in de app stilvallen. De code ondersteunt beide varianten via één variabele (custom_nieuwsbrieven_confirm), dus wisselen kost geen codewijziging.

De rolcheck (Horeca-owner) bepaalt server-side wie de ondernemersnieuwsbrief ziet — de app heeft daar dus géén conditie voor nodig, en subscribe gebruikt dezelfde lijst als whitelist.