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<TParam, TResult>(param,
      _includeLastResultInCommandResults ? lastResult : null, null, true));

  var inputStream = _streamProvider(param);

  _inputStreamSubscription = inputStream.materialize().listen(
    (Notification<TResult> notification) {
      if (notification.isOnData) {
        _resultsSubject.add(notification.requireData);
        var commandResult =
            CommandResult(param, notification.requireData, null, true);
        _commandResultsSubject.add(commandResult);
        RxCommand.loggingHandler?.call(_debugName, commandResult);

        lastResult = notification.requireData;
      } else if (notification.isOnError) {
        if (throwExceptions) {
          _resultsSubject.addError(notification.errorAndStackTrace!.error);
          _commandResultsSubject
              .addError(notification.errorAndStackTrace!.error);
        } else {
          final commandResult = CommandResult<TParam, TResult>(
              param, null, notification.errorAndStackTrace!.error, false);
          _commandResultsSubject.add(commandResult);
          RxCommand.loggingHandler?.call(_debugName, commandResult);
        }
        RxCommand.globalExceptionHandler?.call(_debugName,
            CommandError(param, notification.errorAndStackTrace!.error));
      } else if (notification.isOnDone) {
        final commandResult = CommandResult(param, lastResult, null, false);
        _commandResultsSubject.add(commandResult);

        RxCommand.loggingHandler?.call(_debugName, commandResult);
        _isRunning = false;
        _canExecuteSubject.add(!_executionLocked);
      }
    },
    onError: (error) {
      print(error);
    },
  );
}