execute method
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<TParam, TResult>(param,
_includeLastResultInCommandResults ? lastResult : null, null, true));
assert(
(!_noParamValue && (param != null || null is TParam) ||
(_noParamValue && param == null)),
'You called a RxCommand with no parameters with a parameter or one with a parameter without or a null value!');
final asyncFunc =
_noParamValue ? _funcNoParam! : () => _func!(param as TParam);
asyncFunc().asStream().handleError((error) {
if (throwExceptions) {
if (error is Object) {
_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;
}
final commandResult = CommandResult<TParam, TResult>(param,
_includeLastResultInCommandResults ? lastResult : null, error, false);
_commandResultsSubject.add(commandResult);
RxCommand.globalExceptionHandler
?.call(_debugName, CommandError(param, error));
RxCommand.loggingHandler?.call(_debugName, commandResult);
_isRunning = false;
_canExecute = !_executionLocked;
_canExecuteSubject.add(!_executionLocked);
}).listen((result) {
final commandResult =
CommandResult<TParam, TResult>(param, result, null, false);
_commandResultsSubject.add(commandResult);
lastResult = result;
_resultsSubject.add(result);
RxCommand.loggingHandler?.call(_debugName, commandResult);
_isRunning = false;
_canExecute = !_executionLocked;
_canExecuteSubject.add(!_executionLocked);
});
}