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]) {
  if (!_canExecute) {
    return;
  }

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

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

  var inputObservable = _observableProvider(param);

  inputObservable.materialize().listen(
    (notification) {
      if (notification.isOnData) {
        _resultsSubject.add(notification.value);
        _commandResultsSubject
            .add(CommandResult(notification.value, null, true));
        lastResult = notification.value;
      } else if (notification.isOnError) {
        if (throwExceptions) {
          _resultsSubject.addError(notification.error);
          _commandResultsSubject.addError(notification.error);
        } else {
          _commandResultsSubject
              .add(CommandResult<TResult>(null, notification.error, false));
        }
      } else if (notification.isOnDone) {
        _commandResultsSubject.add(CommandResult(lastResult, null, false));
        _isRunning = false;
        _canExecuteSubject.add(!_executionLocked);
      }
    },
    onError: (error) {
      print(error);
    },
  );
}