execute method

  1. @override
void execute (
  1. [TParam param]
)
override

Calls the wrapped handler function with an option input parameter

Implementation

@override
execute([TParam param]) {
  //print("************ Execute***** canExecute: $_canExecute ***** isExecuting: $_isRunning");

  if (!_canExecute) {
    return;
  }

  if (_isRunning) {
    return;
  } else {
    _isRunning = true;
    _canExecuteSubject.add(false);
  }

  _commandResultsSubject.add(CommandResult<TResult>(
      _emitLastResult ? lastResult : null, null, true));

  _func(param).asStream().handleError((error) {
    if (throwExceptions) {
      _resultsSubject.addError(error);
      _commandResultsSubject.addError(error);
      _isRunning = false;
      _isExecutingSubject.add(
          false); // Has to be done because in this case no command result is queued
      _canExecute = !_executionLocked;
      _canExecuteSubject.add(!_executionLocked);
      return;
    }

    _commandResultsSubject.add(CommandResult<TResult>(
        _emitLastResult ? lastResult : null, error, false));
    _isRunning = false;
    _canExecute = !_executionLocked;
    _canExecuteSubject.add(!_executionLocked);
  }).listen((result) {
    _commandResultsSubject.add(CommandResult<TResult>(result, null, false));
    lastResult = result;
    _resultsSubject.add(result);
    _isRunning = false;
    _canExecute = !_executionLocked;
    _canExecuteSubject.add(!_executionLocked);
  });
}