execute method
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);
},
);
}