метод elementAt
- int index
Возвращает значение события данных index-го порядка в этом потоке.
Перестаёт прослушивать этот поток после получения события данных index-го порядка.
Внутри метод отменяет подписку после получения этих элементов. Это означает, что потоки с одной подпиской (не широковещательные) закрываются и их нельзя использовать повторно после вызова этого метода.
Если до получения значения происходит событие ошибки, Future завершается с этой ошибкой.
Если до получения значения происходит событие завершения, Future завершается с ошибкой RangeError.
Реализация
Future<T> elementAt(int index) {
RangeError.checkNotNegative(index, "index");
_Future<T> result = new _Future<T>();
int elementIndex = 0;
StreamSubscription<T> subscription;
subscription =
this.listen(null, onError: result._completeError, onDone: () {
result._completeError(
new IndexError.withLength(index, elementIndex,
indexable: this, name: "index"),
StackTrace.empty);
}, cancelOnError: true);
subscription.onData((T value) {
if (index == elementIndex) {
_cancelAndValue(subscription, result, value);
return;
}
elementIndex += 1;
});
return result;
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/Stream/elementAt.html