为 dart 中的每次发射生成带有延迟的流

Dav*_*vid 7 dart reactive rxdart

我想从 dart 中具有特定延迟的列表中发出流中的值。

因此,从 [1,2,3](这是一个常规列表)中,我想像在单独的事件中一样发出值1...2...3

我尝试过这样的事情

List<int> myList = [1,2,3];
Subject _current = BehaviorSubject<int>();
Stream<int> get current$ => _current.stream.delay(Duration(seconds:1));

myList.forEach(current.add);
Run Code Online (Sandbox Code Playgroud)

但我得到...123的是,所以这将整个流延迟 1 秒,而不是列表中的每个值。

有任何想法吗?谢谢

use*_*794 6

如果您想避免 rxdart,您可以使用简单的转换函数,例如:

Stream<T> streamDelayer<T>(Stream<T> inputStream, Duration delay) async* {
  await for (final val in inputStream) {
    yield val;
    await Future.delayed(delay);
  }
}

void main() {
  var s = Stream.fromIterable([1, 2, 3]);
  streamDelayer(s, Duration(seconds: 1)).forEach(print);
}
Run Code Online (Sandbox Code Playgroud)

  • 将收益率移至等待以下也会延迟第一个值。 (2认同)

Gün*_*uer 0

rxdart

包提供了一个延迟变压器或方法来做到这一点

new Observable.fromIterable([1, 2, 3, 4])
  .delay(new Duration(seconds: 1))
  .listen(print); // [after one second delay] prints 1, 2, 3, 4 immediately
Run Code Online (Sandbox Code Playgroud)

还有其他类似debounce的