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 {
  /// setter
  if (scope == null) return null;
  var function = propertyOrFunction.toLowerCase().trim();

  switch (function) {

    case "open":

      // open by index
      var index = toInt(elementAt(arguments, 0));
      if (index != null) {
        this.index = index;
        return true;
      }

      // open by id
      var id = toStr(elementAt(arguments, 0));
      if (id != null) {
        var tab = tabs.firstWhereOrNull((t) => t.id == id);
        if (tab != null) {
          this.index = tabs.indexOf(tab);
          return true;
        }
      }

      // open by url
      var url = toStr(elementAt(arguments, 0));
      if (url != null) {
        var tab = tabs.firstWhereOrNull((t) => t.url == url);
        if (tab != null) {
          this.index = tabs.indexOf(tab);
          return true;
        }
      }

      return true;

    // close specified tab
    case "close":

      // close by index
      var index = toInt(elementAt(arguments, 0));
      if (index != null) {
        if (index < 0) index = 0;
        if (index >= tabs.length) index = tabs.length - 1;
        deleteTab(tabs[index]);
        return true;
      }

      // close by id
      var id = toStr(elementAt(arguments, 0));
      if (id != null) {
        var tab = tabs.firstWhereOrNull((t) => t.id == id);
        if (tab != null) {
          deleteTab(tab);
          return true;
        }
      }

      // close by url
      var url = toStr(elementAt(arguments, 0));
      if (url != null) {
        var tab = tabs.firstWhereOrNull((t) => t.url == url);
        if (tab != null) {
          deleteTab(tab);
          return true;
        }
      }

      return true;

    case "add":
      var url = toStr(elementAt(arguments, 0));
      var title = toStr(elementAt(arguments, 1));
      var closeable = toBool(elementAt(arguments, 2));
      var icon = toStr(elementAt(arguments, 3));
      showTab(url, title: title, closeable: closeable, icon: icon);
      return true;

    // close specified tab
    case "next":
      showNextTab();
      return true;

    case "prev":
    case "previous":
      showPreviousTab();
      return true;

    case "first":
      showPreviousTab();
      return true;

    case "last":
      showPreviousTab();
      return true;

  }

  return super.execute(caller, propertyOrFunction, arguments);
}