Finds the single element in this stream matching test
.
Like lastMatch
, except that it is an error if more than one
matching element occurs in the stream.
Source
Future<T> singleWhere(bool test(T element)) { _Future<T> future = new _Future<T>(); T result = null; bool foundResult = false; StreamSubscription subscription; subscription = this.listen( (T value) { _runUserCode( () => true == test(value), (bool isMatch) { if (isMatch) { if (foundResult) { try { throw IterableElementError.tooMany(); } catch (e, s) { _cancelAndErrorWithReplacement(subscription, future, e, s); } return; } foundResult = true; result = value; } }, _cancelAndErrorClosure(subscription, future) ); }, onError: future._completeError, onDone: () { if (foundResult) { future._complete(result); return; } try { throw IterableElementError.noElement(); } catch (e, s) { _completeWithErrorCallback(future, e, s); } }, cancelOnError: true); return future; }