当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart StreamTransformer构造函数用法及代码示例


dart:async 库中StreamTransformer构造函数 的用法介绍如下。

用法:

const
      StreamTransformer<S, T>(
   StreamSubscription<T> onListen(
   Stream<S> stream,    
   bool cancelOnError   
)   
)

根据给定的 onListen 回调创建 StreamTransformer

返回的流转换器在收听转换后的流时使用提供的 onListen 回调。此时,回调接收输入流(传递给 bind 的流)和布尔标志 cancelOnError 以创建 StreamSubscription

如果转换后的流是广播流,则此转换器的StreamTransformer.bind 方法返回的流也是广播流。

如果多次收听转换后的流,则每次新的 Stream.listen 调用都会再次调用 onListen 回调。无论流是否为广播流,都会发生这种情况,但对于非广播流,调用通常会失败。

onListen 回调确实 not 接收传递给 Stream.listen 的处理程序。这些是在调用 onListen 回调后自动设置的(使用 StreamSubscription.onDataStreamSubscription.onErrorStreamSubscription.onDone )。

最常见的是,onListen 回调将首先在提供的流上调用 Stream.listen(带有相应的 cancelOnError 标志),然后返回一个新的 StreamSubscription

创建 StreamSubscription 的常用方法有两种:

  1. 通过分配 StreamController 并返回监听其流的结果。转发暂停、恢复和取消事件很重要(除非转换器有意改变这种行为)。
  2. 通过创建一个实现 StreamSubscription 的新类。请注意,订阅应在收听流的Zone 中运行回调(请参阅ZoneZone.bindCallback)。

例子:

/// Starts listening to [input] and duplicates all non-error events.
StreamSubscription<int> _onListen(Stream<int> input, bool cancelOnError) {
  // Create the result controller.
  // Using `sync` is correct here, since only async events are forwarded.
  var controller = StreamController<int>(sync: true);
  controller.onListen = () {
    var subscription = input.listen((data) {
      // Duplicate the data.
      controller.add(data);
      controller.add(data);
    },
        onError: controller.addError,
        onDone: controller.close,
        cancelOnError: cancelOnError);
    // Controller forwards pause, resume and cancel events.
    controller
      ..onPause = subscription.pause
      ..onResume = subscription.resume
      ..onCancel = subscription.cancel;
  };
  // Return a new [StreamSubscription] by listening to the controller's
  // stream.
  return controller.stream.listen(null);
}

// Instantiate a transformer:
var duplicator = const StreamTransformer<int, int>(_onListen);

// Use as follows:
intStream.transform(duplicator);

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 StreamTransformer<S, T> constructor。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。