first method

Future<R> first([
  1. bool cancelSubscription = false
])

输出Future, cancelSubscription决定是否取消订阅

由于stream.first会自动结束流的订阅, 但是又想继续流的话, 就使用这个方法获取Future

Implementation

Future<R> first([bool cancelSubscription = false]) async {
  if (cancelSubscription) {
    return stream.first;
  } else {
    final completer = Completer<R>();
    final subscription = stream.listen(completer.complete);
    final result = await completer.future;
    subscription.cancel();
    return result;
  }
}