contains 方法
- Object? needle
返回 needle
是否出现在此流提供的元素中。
使用 Object.== 将此流的每个元素与 needle
进行比较。如果找到相等的元素,返回的 future 将完成并接收到 true
。如果此流结束而没有找到匹配项,future 将用 false
完成。
如果此流发出错误,或者调用 Object.== 抛出异常,则返回的 future 将用那个错误完成,并且处理停止。
示例
final result = await Stream.fromIterable(['Year', 2021, 12, 24, 'Dart'])
.contains('Dart');
print(result); // true
实现
Future<bool> contains(Object? needle) {
_Future<bool> future = new _Future<bool>();
StreamSubscription<T> subscription =
this.listen(null, onError: future._completeError, onDone: () {
future._complete(false);
}, cancelOnError: true);
subscription.onData((T element) {
_runUserCode(() => (element == needle), (bool isMatch) {
if (isMatch) {
_cancelAndValue(subscription, future, true);
}
}, _cancelAndErrorClosure(subscription, future));
});
return future;
}