当前位置: 首页 > news >正文

flutter StreamSubscription 订阅者 stream

当您使用[Stream.listen]收听[Stream]时
则返回[StreamSubscription]对象

List<StreamSubscription?> subscriptions = [];

  @overridevoid initState() {super.initState();//subscriptions列表添加两个StreamSubscription。Stream.listen返回StreamSubscription对象subscriptions..add(ZegoUIKit().getAudioVideoListStream().listen(//onStreamListUpdated相当于(event){onStreamListUpdated(event)},接收到数据时触发回调onStreamListUpdated,onDone: () {//streamController.sink.close(); //只有手动调用close方法发送一个done事件,onDone才会被回调print('测试视频控件1-------------getAudioVideoListStream-onDone');},onError: (e) {//有错误时会回调print('测试视频控件1-------------getAudioVideoListStream-onError${e}');}))..add(ZegoUIKit().getScreenSharingListStream().listen(onStreamListUpdated,    onDone: () {print('测试视频控件1-------------getScreenSharingListStream-onDone');},onError: (e) {print('测试视频控件1-------------getScreenSharingListStream-onError${e}');}));}
//流会执行且返回List<ZegoUIKitUser>数据Stream<List<ZegoUIKitUser>> getAudioVideoListStream() {return ZegoUIKitCore.shared.coreData.audioVideoListStreamCtrl.stream.map((users) => users.map((e) => e.toZegoUikitUser()).toList());}
//监听数据:获取到流返回的数据后执行下面代码,如果没返回数据就不会执行这里void onStreamListUpdated(List<ZegoUIKitUser> streamUsers) {print('测试视频控件1---streamUsers${streamUsers}');fullScreenUserNotifier.value = ZegoUIKit().getScreenSharingList().isEmpty? null: ZegoUIKit().getScreenSharingList().first;setState(() {updateUserList(ZegoUIKit().getAudioVideoList() + ZegoUIKit().getScreenSharingList(),);});

Flutter异步编程-Stream
Future和stream的区别(Future返回一个异步的结果。stream返回多个结果,持续监听)
Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步函数返回一个将会包含结果的 Future。该 Future 会在结果准备好时通知调用者。Stream 是一系列异步事件的序列。其类似于一个异步的 Iterable(可迭代的),不同的是当你向 Iterable 获取下一个事件时它会立即给你,但是 Stream 则不会立即给你而是在它准备好时

可以使用一个餐厅吃饭场景来理解Future和Stream的区别:
Future就好比你去一家餐厅吃饭,在前台点好你想吃的菜后,付完钱后服务员会给你一个等待的号码牌(相当于先拿到一个Future),后厨就开始根据你下的订单开始做菜,等到你的菜好了后,就可以通过号码牌拿到指定的菜了(返回的数据或异常信息)。 Stream就好比去一家餐厅吃饭,在前台点好A,B,C,D4种你想吃的菜后(订阅数据流过程),然后你就去桌子等着,至于菜什么时候好,你也不知道所以就一直等着(类似于一直监听listen着),后厨就开始根据你下的订单开始做菜, 等着你的第一盘A种菜好了后,服务员就会主动传送A到你的桌子上(基于一种类似订阅-推送机制),没有特殊意外,服务员推送菜的顺序应该也是A,B,C,D。

stream返回数据,监听数据

//Stream实现
void main() async {
Stream stream = Stream.periodic(Duration(seconds: 1), (int value) {
return value + 1;//stream每秒都加1
});
await stream.forEach((element) => print(‘stream value is: $element’));//通过steam可以获得结果
}

http://www.lryc.cn/news/185236.html

相关文章:

  • 安全性算法
  • 解决ASP.NET Core的中间件无法读取Response.Body的问题
  • DownloadingImages 下载缓存图片,显示图片文字列表
  • 【应用层协议】HTTPS的加密流程
  • 最新AI创作系统/AI绘画系统/ChatGPT系统+H5源码+微信公众号版+支持Prompt应用
  • Z410 2023款无人机,专为零基础开发者打造的入门级开源无人机
  • elementui修改message消息提示颜色
  • Linux和Hadoop的学习
  • 通达信指标预警信号,自动发送给微信好友1.0
  • 浅谈CDN内容分发与全局负载均衡
  • 【框架风格】解释器模式
  • c++视觉图像线性混合
  • Doris 2.0.1 DockerFile版 升级实战
  • kotlin aes 加密解密
  • sqlite3的lib和头文件在哪下载 2023/9/19 上午10:46:43
  • 磁通量概述
  • MySql 终端常用指令
  • 【React-hooks篇幅】自定义hooks
  • 面试算法21:删除倒数第k个节点
  • 数据结构——排序算法(C语言)
  • 基于Http Basic Authentication的接口
  • 【yaml文件的编写】
  • kt6368A双模蓝牙芯片无法透传 可能是什么问题呢
  • SpringBoot终极讲义第二章笔记
  • 【C++面向对象侯捷下】4. pointer-like classes,关于智能指针 | 5. function-like classes,所谓仿函数
  • 社科院与杜兰大学能源管理硕士项目——惊喜会随时间慢慢酝酿而出
  • Array简介
  • Django的模版使用(Django-03)
  • 详解分布式搜索技术之elasticsearch
  • 系统架构设计:3 软件架构建模技术与应用