# 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.