我想从列表中以特定的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);
但是我得到的是...123
,所以这会使整个流延迟1秒,而不是列表中的每个值。
有什么想法吗? 谢谢
答案 0 :(得分:1)
使用 rxdart 0.25.0 的一种解决方案:
final Stream<int> stream =
Rx.range(1, 3)
.asyncExpand((event) =>
event == 1
? Stream.value(event) // return first value immediately
: Rx.timer(event, Duration(seconds: 1))
);
答案 1 :(得分:0)
软件包提供了一个delay转换器或方法来实现
new Observable.fromIterable([1, 2, 3, 4]) .delay(new Duration(seconds: 1)) .listen(print); // [after one second delay] prints 1, 2, 3, 4 immediately
还有其他类似debounce
答案 2 :(得分:0)
我设法使其正常工作
Observable.range(myList)
.concatMap((i) =>
new Observable.timer(i, new Duration(seconds: 1))
.listen(print);
来自rxdart文档本身。感谢Günter的提示。
答案 3 :(得分:0)
使用 interval
包中的 rxdart
Stream.fromIterable(List<int>.generate(100, (i) => i))
.interval(Duration(milliseconds: 10))
.listen((v) {
print(v);
});