flutter - 创建一个观看列表的流?
问题描述
我有一个像这样的全局列表:
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
不好了。我能做些什么来完成这项工作?
解决方案
这可能会有所帮助:
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);
}
推荐阅读
- python - 无法使用从本地文件读取的正确凭据(用户名和密码)对 SSH 服务器进行身份验证
- javascript - localstorage 注意更新 JWT Reactjs
- react-native - 如何添加评论以在本机反应中获取流
- python - AttributeError:“int”对象没有属性“dtype”
- php - 如何使用 Laravel QueryBuilder 搜索 OR
- java - 如何测试 SQL Server 连接属性
- php - Laravel whereIn 结果顺序不正确
- azure - Azure 门户显示错误的服务主体对象 ID
- javascript - 存储 API 授予后如何访问第一方 cookie?
- ios - CALayer 或其他技术来实际修改后面图层的颜色,就像剪裁一样