簡體   English   中英

Dart Stream 中 Kotlin 的 Flow.flatMapLatest 的等價物是什么?

[英]What is the equivalent of Kotlin's Flow.flatMapLatest in Dart Stream?

Kotlin中有Flow.flatMapLatest() function :

每次原始流發出一個值時,返回一個流切換到轉換 function 產生的新流。 當原始流發出新值時,轉換塊產生的先前流將被取消。

Dart 的Stream是否有等效的Stream

什么都不存在,但它應該很容易編寫。

import "dart:async";

extension StreamExpandLatest<S> on Stream<S> {
  Stream<T> expandLatest<T>(Stream<T> expand(S value)) {
    var result = StreamController<T>(sync: true);
    result.onListen = () {
      StreamSubscription<T>? current;
      StreamSubscription<S> sourceSubscription = this.listen((S data) {
        current?.cancel();
        try {
          current = expand(data).listen(result.add, onError: result.addError);
        } catch (e, s) {
          result.addError(e, s);
        }
      }, onError: (Object e, StackTrace s) {
        current?.cancel();
        result.addError(e, s);
      }, onDone: () {
        current?.cancel();
        result.close();
      });
      result
        ..onPause = () {
          sourceSubscription.pause();
          current?.pause();
        }
        ..onResume = () {
          current?.resume();
          sourceSubscription.resume();
        }
        ..onCancel = () {
          current?.cancel();
          sourceSubscription.cancel();
        };
    };
    return result.stream;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM