當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。