method dispatchMethod


void dispatchMethod(object, callbackOrMethod, List args)

Calls methodOrCallback with args if it is a closure, otherwise, treat it as a method name in object, and invoke it.

Source

void dispatchMethod(object, callbackOrMethod, List args) {
  _eventsLog.info(() => '>>> [$_name]: dispatch $callbackOrMethod');

  if (callbackOrMethod is Function) {
    int maxArgs = smoke.maxArgs(callbackOrMethod);
    if (maxArgs == -1) {
      _eventsLog.warning(
          'invalid callback: expected callback of 0, 1, 2, or 3 arguments');
    }
    args.length = maxArgs;
    Function.apply(callbackOrMethod, args);
  } else if (callbackOrMethod is String) {
    smoke.invoke(object, smoke.nameToSymbol(callbackOrMethod), args,
        adjust: true);
  } else {
    _eventsLog.warning('invalid callback');
  }

  _eventsLog.fine(() => '<<< [$_name]: dispatch $callbackOrMethod');
}