假设我有一个Stream<int>
在不同的时间差,即5毫秒至1000毫秒之间发射整数。
当增量为<= 50ms的我想将它们合并。例如:
3, (delta:100) 5, (delta:27) 6, (delta:976) 3
我想消费:3,11(使用加法合并),3。
这可能吗?
您可以从debounceBuffer包使用stream_transform流变压器。
stream
.transform(debounceBuffer(const Duration(milliseconds: 50)))
.map((list) => list.fold(0, (t, e) => t + e))
你可以写,可以轻松地够自己:
Stream<int> debounce(
Stream<int> source, Duration limit, int combine(int a, int b)) async* {
int prev;
var stopwatch;
await for (var event in source) {
if (stopwatch == null) {
// First event.
prev = event;
stopwatch = Stopwatch()..start();
} else {
if (stopwatch.elapsed < limit) {
prev = combine(prev, event);
} else {
yield prev;
prev = event;
}
stopwatch.reset();
}
}
// If any event, yield prev.
if (stopwatch != null) yield prev;
}