打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Flutter StreamController 异步通信、Streamr 流异步通信

题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。


Flutter是谷歌推出的最新的移动开发框架。

Flutter 中可用于异步通信的方案有如下:

Stream 是一个抽象类,用来表示一个序列的异步数据,Stream流分类:

  • 单订阅流(Single Subscription),这种流最多只能有一个监听器(listener)

  • 多订阅流(Broadcast),这种流可以有多个监听器监听(listener)

Stream 可以接受任何类型的数据,Stream 有同步流和异步流之分,它们的区别在于同步流会在执行 add,addError 或 close 方法时会立即发送事件,而异步流总是在事件队列中的代码执行完成后再发送事件。

当然在实际项目开发中以单订阅流的应用为多,以下首先以多订阅流开述。

1 多订阅流

第一步:创建流对象,在这里通过 流控制器 StreamController 来进行操作,下面的文章中会直接称流。

StreamController<String> streamController = StreamController.broadcast();

第二步:设置流监听,业务开发中,设置多个监听,可以分别设置在页面 A、页面B中,然后在页面C中发送更新数据,在这中间需要注意的是添加listen监听后,返回订阅消息对象 StreamSubscription,需要在页面销毁时通过 StreamSubscription 对象关闭对应的监听,否则就是造成监听无法移动,形成内存泄漏,核心代码如下代码清单1-1:

///代码清单 1-1 class TestBPage extends StatefulWidget {  @override  State<StatefulWidget> createState() {    return _TestBPageState();  }}
class _TestBPageState extends State { ///消息订单对象 StreamSubscription _streamSubscription; @override void initState() { super.initState(); ///监听二 _streamSubscription=streamController.stream.listen((event) { print("页面B接收到数据 $event"); }); } @override void dispose() { super.dispose(); ///取消监听 _streamSubscription.cancel(); } ... ... }

StreamSubscription主要用来操作当前的监听事件,一个多订阅流中对应多个事件监听,那么也就会对应有多个 StreamSubscription,那么对于每个单独的事件监听就需要通过 StreamSubscription 对象来操作,详看本文目录3。

第三步:就是发送数据 ,如点击一个按钮触发或者是网络请求数据结果分发给多个页面,当然这个是以实际业务为准

streamController.add("测试数据");

第四步:就是在整个流操作使用结束后关闭流

 @override void dispose() {   super.dispose();   streamController.close(); }

2 单订阅流

单订阅流只允许有一个监听,默认使用 StreamController 的构造函数来创建,代码如下:

///创建单订阅流控制器StreamController<String> streamSingController = StreamController();

然后对其设置监听与多订阅流方式一致:

class _TestBPageState extends State {  ///消息订单对象  StreamSubscription _streamSubscription;  @override  void initState() {    super.initState();    ///监听二    _streamSubscription=streamSingController.stream.listen((event) {      //然后在这里面进行更新数据的操作      print("页面B接收到数据 $event");    });  }  @override  void dispose() {    super.dispose();    ///取消监听    _streamSubscription.cancel();  }  ... ... }

当再为其添加一个 listen 监听时,会报出异常:

3 StreamSubscription

StreamSubscription 主要用来操作当前的监听事件,它提供了一些操作方法如下:
取消消息订阅,此方法一般用在页面销毁时,执行后,订阅监听不可复用

@overridevoid dispose() {  super.dispose();  ///取消消息订阅  _streamSubscription.cancel();}
///暂停消息订阅if(!_streamSubscription.isPaused){  _streamSubscription.pause();}
///恢复消息订阅if(_streamSubscription.isPaused){  _streamSubscription.resume();}

当然要实现百万Demo随时复制粘贴的目标,本文章是必须要提供源码的,你可以点击查看原文来查看。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Flutter完整开发实战详解(十一、全面深入理解Stream)
Flutter - 检查 Internet 连接示例[Flutter专题14]
计算机网络基础知识,仅此一篇足矣
Flutter轮播图
《Flutter 动画系列》组合动画
Flutter学习笔记(32)--PointerEvent事件处理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服