RxCommand<TParam, TResult> constructor
RxCommand<TParam, TResult>(Subject<TResult> _resultsSubject, Observable<bool> canExecuteRestriction, bool _emitLastResult, bool _resultSubjectIsBehaviourSubject, TResult lastResult)
Implementation
RxCommand(this._resultsSubject, Observable<bool> canExecuteRestriction, this._emitLastResult,
this._resultSubjectIsBehaviourSubject, this.lastResult)
: super(_resultsSubject) {
_commandResultsSubject = _resultSubjectIsBehaviourSubject
? new BehaviorSubject<CommandResult<TResult>>()
: new PublishSubject<CommandResult<TResult>>();
_commandResultsSubject.where((x) => x.hasError).listen((x) => _thrownExceptionsSubject.add(x.error));
_commandResultsSubject.listen((x) => _isExecutingSubject.add(x.isExecuting));
final _canExecuteParam = canExecuteRestriction == null
? new Observable<bool>.just(true)
: canExecuteRestriction.handleError((error) {
if (error is Exception) {
_thrownExceptionsSubject.add(error);
}
}).distinct();
_canExecuteParam.listen((canExecute) {
_canExecute = canExecute && (!_isRunning);
_executionLocked = !canExecute;
_canExecuteSubject.add(_canExecute);
});
}