execute method

  1. @override
Future<bool?> execute(
  1. String caller,
  2. String propertyOrFunction,
  3. List arguments
)
override

Implementation

@override
Future<bool?> execute(
    String caller, String propertyOrFunction, List<dynamic> arguments) async {
  if (scope == null) return null;
  var function = propertyOrFunction.toLowerCase().trim();

  // template the first record
  template ??= (data?.isEmpty ?? true)
      ? null
      : Json.encode(Json.copy(data![0], withValues: false));

  switch (function) {
    // clear the list
    case "clear":
      return await clear(
          start: toInt(elementAt(arguments, 0)),
          end: toInt(elementAt(arguments, 1)));

    // add element to the list
    case "add":
    case "insert":
      var jsonOrXml = toStr(elementAt(arguments, 0)) ?? template;
      return await insert(jsonOrXml, toInt(elementAt(arguments, 1)));

    // add element to the list
    case "copy":
      return await copy(elementAt(arguments, 0), elementAt(arguments, 1));

    // remove element from the list
    case "delete":
    case "remove":
      return await delete(elementAt(arguments, 0));

    // remove last element from the list
    case "deletelast":
    case "removelast":
      return data != null ? await delete(data!.length - 1) : true;

    // remove first element from the list
    case "deletefirst":
    case "removefirst":
      return await delete(0);

    // remove where
    case "deletewhere":
    case "removewhere":
      // todo
      return true;

    // move element in the list
    case "move":
      return await move(elementAt(arguments, 0), elementAt(arguments, 1));

    // foreach element in the list
    case "foreach":
      // todo
      return true;

    // reverse the list
    case "reverse":
    case "reversed":
      return await reverse();

    // notify
    case "notify":
      notify();
      return true;
  }
  return super.execute(caller, propertyOrFunction, arguments);
}