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



Kotlin中有一个Flow.flatMapLatest()函数:

返回一个流,该流在每次原始流发出值时切换到转换函数生成的新流。当原始流发出新值时,由变换块生成的上一个流将被取消。

是否存在DartStream的等效函数?

没有任何内容,但编写起来应该相当容易。

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;
}
}

最新更新