Метод elementAt
Future<T> elementAt(Возвращает значение index-го события данных этого потока.
Останавливает прослушивание потока после получения index-го события данных.
Внутренне метод отменяет свою подписку после получения этих элементов. Это означает, что потоки с однократной подпиской (не широковещательные) закрываются и не могут быть повторно использованы после вызова этого метода.
Если происходит событие ошибки до нахождения значения, будущее завершается с этой ошибкой.
Если происходит событие завершения до нахождения значения, будущее завершается с RangeError.
Исходный код
Future<T> elementAt(int index) {
if (index is! int || index < 0) throw new ArgumentError(index);
_Future<T> future = new _Future<T>();
StreamSubscription subscription;
int elementIndex = 0;
subscription = this.listen(
(T value) {
if (index == elementIndex) {
_cancelAndValue(subscription, future, value);
return;
}
elementIndex += 1;
},
onError: future._completeError,
onDone: () {
future._completeError(
new RangeError.index(index, this, "index", null, elementIndex));
},
cancelOnError: true);
return future;
}
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/Stream/elementAt.html