我有一個這樣的全域串列:
var data = [1,2,3];
我將向其中添加更多元素,并且每次我都希望通知其他內容 - 我需要一個流和偵聽器。那么我可以創建一個流并告訴它在串列發生變化時運行 sink.add 嗎?
var stream = Stream.fromIterable(data);
stream.listen((item) => print(item));
> 1
> 2
> 3
data.add(4);
> Uncaught Error: Concurrent modification during iteration
data.remove(3);
> Uncaught Error: Concurrent modification during iteration
不好了。我能做些什么來完成這項作業?
uj5u.com熱心網友回復:
這可能有幫助:
import 'dart:async';
class ObservableList<T> {
final _list = <T>[];
final _itemAddedStreamController = StreamController<T>();
final _listStreamController = StreamController<List<T>>();
Stream get itemAddedStream => _itemAddedStreamController.stream;
Stream get listStream => _listStreamController.stream;
void add(T value) {
_list.add(value);
_itemAddedStreamController.add(value);
_listStreamController.add(_list);
}
void dispose() {
_listStreamController.close();
_itemAddedStreamController.close();
}
}
void main() {
final observableList = ObservableList<int>();
observableList.itemAddedStream.listen((value) => print(value));
observableList.add(1);
observableList.add(2);
observableList.add(3);
observableList.add(4);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342561.html
