Taak 127-B — twee Custom FUNCTIONS voor de kloonknop
====================================================

Custom Code-tab -> "+" -> Function. Twee losse functies.

  kloonTekst : argumenten  bron (JSON)  +  sleutel (String, niet-nullable)
               Return Type String, **Nullable UIT**
  kloonLijst : argumenten  bron (JSON)  +  sleutel (String, niet-nullable)
               Return Type String, **Is List AAN**, **Nullable UIT**

⚠️ Return type non-nullable houden. Bij een String? eist FlutterFlow een
"Default Variable Value", en valueOrDefault substitueert die ook bij een LEGE
string -- dan kun je een leeg veld nooit klonen.

⚠️ Geen getJsonField() gebruiken: die bestaat niet binnen een Custom Function
(wel in een Custom Action). Gewone Map-toegang dus.

⚠️ Plat geschreven, bewust geen .map() of andere closure: FlutterFlow's
validator struikelt over een genest (params) { ... }-patroon in de body en
weigert dan op te slaan met "The function is empty or cannot be parsed".

Vergeet Ctrl+S niet -- zonder expliciete save haalt de wijziging de export niet,
ook al staat er "Synced".

⬇ PLAK VANAF HIER (kloonTekst) ⬇

String kloonTekst(
  dynamic bron,
  String sleutel,
) {
  if (bron == null || bron is! Map) {
    return '';
  }
  final waarde = bron[sleutel];
  if (waarde == null) {
    return '';
  }
  return waarde.toString();
}

⬇ PLAK VANAF HIER (kloonLijst) ⬇

List<String> kloonLijst(
  dynamic bron,
  String sleutel,
) {
  final uit = <String>[];
  if (bron == null || bron is! Map) {
    return uit;
  }
  final waarde = bron[sleutel];
  if (waarde is List) {
    for (final item in waarde) {
      if (item != null) {
        uit.add(item.toString());
      }
    }
  }
  return uit;
}
