创建一个观看列表的流?

Posted

技术标签:

【中文标题】创建一个观看列表的流?【英文标题】:Create a stream watching a list? 【发布时间】:2021-12-14 20:12:11 【问题描述】:

我有一个这样的全局列表:

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

哦,不。我可以做些什么来完成这项工作?

【问题讨论】:

【参考方案1】:

这可能会有所帮助:

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);

【讨论】:

以上是关于创建一个观看列表的流?的主要内容,如果未能解决你的问题,请参考以下文章

将视频添加到 YouTube 上用户的“稍后观看”播放列表

Java 8,基于另一个列表索引的流

RxDart,将列表中的每个项目映射到来自永不结束的流的另一个对象

Youtube API 获取稍后观看播放列表

无法将视频插入稍后观看 (WL) 播放列表

获取 YouTube 视频观看次数 YouTube API