every方法

Future<bool> every(
  1. bool test(
    1. T element
    )
)

检查是否所有由这个流提供的元素都通过test

对流的每个元素调用test。如果调用返回false,返回的future将以false完成,并停止处理。

如果这个流结束而没有找到test拒绝的元素,返回的future将以true完成。

如果这个流发出错误,或者调用test抛出异常,返回的future将以那个错误完成,并停止处理。

示例

final result =
    await Stream.periodic(const Duration(seconds: 1), (count) => count)
        .take(15)
        .every((x) => x <= 5);
print(result); // false

实现

Future<bool> every(bool test(T element)) {
  _Future<bool> future = new _Future<bool>();
  StreamSubscription<T> subscription =
      this.listen(null, onError: future._completeError, onDone: () {
    future._complete(true);
  }, cancelOnError: true);
  subscription.onData((T element) {
    _runUserCode(() => test(element), (bool isMatch) {
      if (!isMatch) {
        _cancelAndValue(subscription, future, false);
      }
    }, _cancelAndErrorClosure(subscription, future));
  });
  return future;
}