使用Stream实现事件流

news2024/11/15 13:51:04

文章目录

  • 1 概念介绍
  • 2 使用方法
  • 3 示例代码

我们在上一章回中介绍了Flutter中的异步操作,本章回中将介绍Flutter中的事件流.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1 概念介绍

我们在上一章回中介绍了异步操作相关的内容,本章回中将介绍如何把多个异步操作组成事件流。事件流是指让事件按照一定的顺序去执行,我们介绍RxJava时介绍这方
面的内容,感兴趣的看官可以去看看。Flutter提供了Stream类来实现事件流,本章回中将介绍它的使用方法。

2 使用方法

Stream类提供了一些静态方法来实现事件操作,常用的是静态方法如下:

  • fromFutures方法:从Future数组中获取异步操作来组成事件流;事件的顺序按照数组的索引值依次进行;
  • listen方法:从事件流中获取事件的运行状态,比如运行错误,运行完成;
    我们重点介绍listen方法,该方法以监听的方式运行,它提供了三个方法类型的参数来监听事件的运行状态,详细如下:
  • onData方法:每个事件运行完成后都会执行该方法,该方法是必选方法;
  • onError方法:如果事件流中的某个事件运行时发生了错误,那么回调该方法;
  • onDone方法:所有事件运行完成后回调该方法,表示事件流运行结束;
    这三个方法中只有第一个方法是必选方法,最后两个方法是可选方法,不过我还是建议大家把这三个方法都用起来,特别是事件流中有错误发生可以获取到错误信息。
    如果大家熟悉RxJava的话就地发现Stream的运行机制和RxJava的运行机制基本相同,不熟悉的话,也不用担心,这种机制就是典型的观察者模式:fromFuture方法
    对应的数组就是被观察者,或者说事件流就是被观察者,而listen方法就是观察者。

3 示例代码

_syncMultiLauncher() {
  Stream.fromFutures([
    Future.delayed(Duration(seconds: 2),()=>debugPrint('do one'),),
    // Future.delayed(Duration(seconds: 2),()=>debugPrint('do two'),),
    Future.delayed(Duration(seconds: 2),(){throw AssertionError();},),
    Future.delayed(Duration(seconds: 2),()=>debugPrint('do three'),),
  ])
  .listen(
    (event) {print('onData');},
    onDone:() => print('onDone'),
    onError: (v) => print('onError'),
  );
}

在上面的代码中,使用三个Future异步事件组成了事件流,它的执行顺序按照它们在数组中的索引依次进行,编译并且运行上面的程序可以得到以下运行结果:
I/flutter ( 7402): do one
I/flutter ( 7402): onData
I/flutter ( 7402): onError
I/flutter ( 7402): do three
I/flutter ( 7402): onData
I/flutter ( 7402): onDone
从程序运行结果中可以看到先运行事件流中的第一个事件:do one,listen()方法监听到该事件后运行onData方法;接着运行事件流中的第二个事件,该事件主动抛出
一个错误,listen()方法监听到错误后运行onError方法,注意它不会去运行onData方法;最后运行第三个事件:do three,listen()方法监听到该事件后运行
onData方法,到目前为止,事件流中的三个事件都已经运行结束,此时listen()方法调用onDone方法,表示事件流中的所有事件运行完成。
看官们,关于"Flutter中的事件流"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

施耐德EcoStruxure Machine SCADA Expert(EMSE)与SQL数据库连接(十五)

我习惯使用SQL Server 数据库与EMSE进行连接。 用的是sql 2017 关于数据库软件的安装教程 网上一大把。 1.新建数据库 打开数据库管理工具,新建数据库 2.新建表单 (ps:这里先做一个小测试-----目的是验证与EMSE软件的链接是否顺畅。) 添加两个元素进去…

图神经网络的新篇章:通用、强大、可扩展的图变换器

人工智能咨询培训老师叶梓 转载标明出处 图变换器(Graph Transformers, GTs)因其在处理节点间全局依赖关系方面的能力而受到广泛关注。然而,现有的GTs模型在处理大规模图时面临着计算复杂度高、泛化能力有限等问题。为了解决这些问题&#x…

对比评测5款实用在线翻译工具,包括有道在线翻译

大家好,今天咱们来聊聊在线翻译工具。在这个信息爆炸的时代,语言不再是沟通的障碍,多亏了这些强大的翻译神器。今天,我将带大家比较五款热门的在线翻译工具,究竟谁更胜一筹呢?让我们一探究竟! …

用友U8CRM relobjreportlist.php SQL注入漏洞复现

0x01 漏洞描述: 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件,旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 用友 U8 CRM客户关系管理系统relobjreportlist.php 文件存在SQL注入漏洞,未经身份验证的攻击者通过…

Linux 一些快捷键使用操作技巧

ctrl c : 强制停止 如图仅输入tail命令时程序会卡住,这时就需要强制停止 ctrl d : 退出或者登出 history : 查看历史输入命令 !命令 :自动执行上一次匹配前缀的命令 (注意不要用这个命令执行太过久远的,容易执行错误…

字节数据转16进制对应十进制数

在数据处理中经常面临字节数据需要转换成不同位宽的十进制数据,尤其是在嵌入式处理中该现象特别常见,这里以转换为16位位宽的十进制为例,采用python校本进行数据转换,具体数据如下: 要将上面数据转换为双字节十进制数…

英语六级-学习

01 英语分值比例 02听力学习 听力练习,基础好选择标准VOA和BBC。基础差选择VOA慢速。 听力内容包括不受政治争议的内容,社会生活类(奇闻趣事、日常生活)、经济类(商务、职场相关)、环保类、互联网类---------根据各类主题快速找到录音材料中心点。 研…

文心一言 VS 讯飞星火 VS chatgpt (352)-- 算法导论24.1 3题

三、给定 G(V,E) 是一带权重且没有权重为负值的环路的有向图,对于所有结点 v∈V ,从源结点 s 到结点 v 之间的最短路径中,包含边的条数的最大值为 m 。(这里,判断最短路径的根据是权重,不是边的条数。)请对…

leetcode:最高乘法得分

用auto可以过 class Solution { public:long long maxScore(vector<int>& a, vector<int>& b) {int n b.size();vector<vector<long long>> memo(4,vector<long long>(b.size(), LLONG_MIN));auto dfs [&](auto&& dfs, i…

Java-Part 0

Advanced Java and Cutting-edge Applications Part 0: Course presentation Part 1 其实就是个括号匹配问题&#xff0c;Stack 经典问题&#xff0c;但是好久没用Java&#xff0c;有一点点生疏&#xff0c;感觉老师的版本要简洁的多 package tiei.ajp.test;import java.uti…

二叉树的层序遍历(含八道leetcode相关题目)

文章目录 二叉树层序遍历模板102. 二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右视图637. 二叉树的层平均值515. 在每个树行中找最大值429. N 叉树的层序遍历116. 填充每个节点的下一个右侧节点指针117. 填充每个节点的下一个右侧节点指针 II 二叉树层序遍历模板 …

深度学习笔记(8)预训练模型

深度学习笔记&#xff08;8&#xff09;预训练模型 文章目录 深度学习笔记&#xff08;8&#xff09;预训练模型一、预训练模型构建一、微调模型&#xff0c;训练自己的数据1.导入数据集2.数据集处理方法3.完形填空训练 使用分词器将文本转换为模型的输入格式参数 return_tenso…

C++迭代器 iterator详解

目录 什么是迭代器 迭代器的类型 迭代器的用法 三种迭代器 范围for 什么是迭代器 它提供了一种访问容器&#xff08;如列表、集合等&#xff09;中元素的方法&#xff0c;而无需暴露容器的内部表示。迭代器使得程序员能够以统一的方式遍历不同的数据结构&#xff0c;而无需…

项目集成sharding-jdbc

目录 项目集成sharding-jdbc 1.业务分析 2.数据库构建 3.分库分表策略 项目配置默认数据源 一&#xff1a;导入sharding-jdbc依赖 二&#xff1a;在application文件中编写配置 三&#xff1a;注释掉主配置文件中配置的数据源 注意&#xff1a;这里添加了spring.main.allow…

基于51单片机的矿井安全检测系统

基于51单片机的矿井安全检测系统使用51单片机作为系统主控&#xff0c;LCD1602进行显示同时系统集成了ADC0808和烟雾传感器、甲烷传感器&#xff0c;二者结合测量环境烟雾值&#xff0c;同时使用DHT11温湿度传感器获取环境温湿度值&#xff0c;使用L298N驱动风扇&#xff0c;利…

2009考研数学真题解析-数二:

第一题&#xff1a; 解析&#xff1a;先找间断点&#xff1a;分母不能等于0&#xff0c;分母是sinΠx&#xff0c; 因此不难看出间断点是x0&#xff0c;-1&#xff0c;-2&#xff0c;-3。。。。。 接着一个一个来算这些点是什么间断点。 &#xff0c;从x趋于2开始&#xff0c;分…

2024年一区极光优化+分解+深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测

2024年一区极光优化分解深度学习&#xff01;VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测 目录 2024年一区极光优化分解深度学习&#xff01;VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.中秋献礼&#…

FiBiNET模型实现推荐算法

1. 项目简介 A031-FiBiNET模型项目是一个基于深度学习的推荐系统算法实现&#xff0c;旨在提升推荐系统的性能和精度。该项目的背景源于当今互联网平台中&#xff0c;推荐算法在电商、社交、内容分发等领域的广泛应用。推荐系统通过分析用户的历史行为和兴趣偏好&#xff0c;预…

小球轻重的测量

设有12个小球。其中11个小球的重量相同&#xff0c;称为好球&#xff1b;有一个小球的重量与11个好球的重量不同&#xff08;或轻或重&#xff09;&#xff0c;称这个小球为坏球。试编写一个算法&#xff0c;用一个无砝码的天平称三次找出这个坏球&#xff0c;并确定其比好球轻…

GAMES101(15节,辐射,BRDF)

Irradiance辐射度量学 辐射度量学在渲染领域&#xff0c;可以帮助理解基于物理的光照模型 radiant energy辐射能量Q&#xff0c;累计总能量&#xff08;单位J joule焦耳&#xff09;&#xff0c;就像太阳能板&#xff0c;光照时间越长接收能量越多&#xff0c;收到的能量总和…