【Flutter】合并多个流Stream
1.说明
无意间发现了一个好用的库rxdart,它为 Dart 的 Stream 添加了额外的功能。
2.功能
(1)合并多个流Stream

借助Rx.combineLatest2()合并两个流stream1和stream2。
注意:如果dart文件中同时使用了getx,需要隐藏掉Rx,否则会冲突。
import 'dart:async';import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart';
// import 'package:get/get.dart' hide Rx;// Library: rxdart , v0.28.0
// 为 Dart 的 Stream 添加了额外的功能
// 合并多个流 CombineLatestStream// Publisher: fluttercommunity.devclass RxdartDemo extends StatefulWidget {const RxdartDemo({super.key});State<RxdartDemo> createState() => _RxdartDemoState();
}class _RxdartDemoState extends State<RxdartDemo> {//(热重载报错) Unhandled Exception: Bad state: Stream has already been listened to.// 解决:更改为广播流(broadcast)。StreamController<String> streamController1 = StreamController<String>.broadcast();late Stream<String> stream1;StreamController<int> streamController2 = StreamController<int>.broadcast();late Stream<int> stream2;StreamController<List<int>> streamController3 = StreamController<List<int>>.broadcast();late Stream<List<int>> stream3;void initState() {super.initState();stream1 = streamController1.stream;streamController1.add("A");stream2 = streamController2.stream;streamController2.add(1);stream3 = streamController3.stream;streamController3.add([1, 2]);}void dispose() {streamController1.close();streamController2.close();streamController3.close();super.dispose();}// Rx.combineLatest2 将两个Stream流合并Stream<String> get streamCombined =>Rx.combineLatest2(stream1, stream2, (a, b) => '$a - $b');Widget build(BuildContext context) {return Scaffold(body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [const Text("单个流Stream",style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),),const SizedBox(height: 12,),StreamBuilder<List<int>>(stream: stream3,builder: (context, snapshot) {return Text("${snapshot.data}",style: const TextStyle(fontSize: 16),);}),const SizedBox(height: 12,),const Text("合并多个流Stream",style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),),const SizedBox(height: 12,),StreamBuilder<String>(stream: streamCombined,builder: (context, snapshot) {return Text(snapshot.data ?? 'empty',style: const TextStyle(fontSize: 16),);}),TextButton(onPressed: () {streamController1.add("b");streamController2.add(2);streamController3.add([3, 4]);},child: const Text('Change',style: TextStyle(fontSize: 16, color: Colors.blue),))],),),);}
}相关文章:
【Flutter】合并多个流Stream
1.说明 无意间发现了一个好用的库rxdart,它为 Dart 的 Stream 添加了额外的功能。 2.功能 (1)合并多个流Stream 借助Rx.combineLatest2()合并两个流stream1和stream2。 注意:如果dart文件中同时使用了getx,需要隐…...
【SQL学习笔记】
Pycharm社区版的页面中无database选项? 1、进入Setting-Pluggins窗口,输入database navigator 2、安装后,重启即可 MySQL 的架构共分为两层:Server 层和存储引擎层 1、Server 层负责建⽴连接、分析和执⾏ SQL 2、存储引擎层负…...
contact form 7设置方法与详细步骤
Contact Form 7(CF7)是WordPress中非常流行的表单插件,用于创建和管理网站上的联系表单。以下是Contact Form 7的设置方法与详细步骤: 一、安装Contact Form 7插件 从WordPress后台安装: 登录WordPress后台,进入“插件”菜单下…...
第170天:应急响应-战中溯源反制对抗上线CSGoby蚁剑Sqlmap等安全工具
目录 案例一:溯源反制-Webshell工具-Antsword 案例二:溯源反制-SQL注入工具-SQLMAP 案例三:溯源反制-漏洞扫描工具-Goby 案例四:溯源反制-远程控制工具-CobaltStrike 反制Server,爆破密码(通用&#x…...
5-容器管理工具Docker
├──5-容器管理工具Docker | ├──1-容器管理工具Docker | | ├──1-应用部署容器化演进之路 | | ├──2-容器技术涉及Linux内核关键技术 | | ├──3-Docker生态架构及部署 | | ├──4-使用容器运行Nginx及docker命令介绍 | | ├──5-容器镜像介…...
OCR+PDF解析配套前端工具开源详解!
目录 一、项目简介 TextIn为相关领域的前端开发提供了优秀的范本。 目前项目已在Github上开源! 二、性能特色 三、安装使用 安装依赖启动项目脚本命令项目结构 四、效果展示 面对日常生活和工作中常见的OCR识别、PDF解析、翻译、校对等场景,配套的…...
【操作系统】引导(Boot)电脑的奇妙开机过程
🌹😊🌹博客主页:【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见:【C语言专项】 目录 什么是操作系统的引导? 操作系统的引导(开机过程) Windows操作系…...
国产云桌面迁移对接信创AD域控方案
在前文《替换AD域时,网络准入场景如何迁移对接国产身份域管?》中,根据 AD 在企业中的应用程度,我们将企业分为了轻度、中度及深度三类微软 AD 用户。 轻度AD用户:仅部分应用对接 AD 。替换 AD 时,可能会直接…...
ESP32—C3实现DS18B20(温度传感器)检测温度(Arduino IED )
1源代码(DS18B20) #include <OneWire.h> // 引入OneWire库,用于与单总线设备通信 #include <DallasTemperature.h> // 引入DallasTemperature库,用于读取DS18B20温度传感器数据// 定义连接到DS18B20数据引脚的GPIO编…...
Linux系统中安装KenLM步骤及注意事项
一、前言: Kenlm模型:本项目基于Kenlm统计语言模型工具训练了中文NGram语言模型,结合规则方法、混淆集可以纠正中文拼写错误,方法速度快,扩展性强,效果一般 二、安装步骤: 1、安装依赖项 Ke…...
xss-labs靶场第六关测试报告
目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.…...
传智杯 第六届—E
题目描述: leafee 最近爱上了 abb 型语句,比如“叠词词”、“恶心心”。 leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列? 定义: abb 型字符串满足以下条件: 字符…...
2024.10月12日--- SpringMVC异常处理
异常处理 SpringMVC处理异常的方式有三种,当然也可以使用AOP面向编程,自定义一个类进入切入。 第一种:使用SpringMVC提供的简单异常处理器SimpleMappingExceptionResolver <!--SpringMVC提供的异常处理器类型:SimpleMappingE…...
边缘人工智能(Edge Intelligence)
边缘人工智能(Edge AI)是指在边缘设备上直接运行人工智能(AI)和机器学习(ML)算法的技术。机器学习是一个广泛的领域,近年来取得了巨大的进步。它所基于的原则是,计算机可以通过从数据…...
C++20主要特性
Concepts(概念): Concepts 是一种新的语言特性,允许程序员明确定义类型的要求,从而提高了模板代码的可读性和错误消息的质量。 template <typename T> concept Integral std::is_integral_v<T>;template…...
IterComp: 从模型图库中迭代合成感知反馈学习,用于文本到图像的生成
我们从多个模型中收集组成感知模型偏好,并采用迭代反馈学习方法,使基础扩散模型和奖励模型都能逐步自我完善。 我们提出了一种迭代反馈学习方法,通过多次迭代,使基础扩散模型和奖励模型逐步自我完善,从而以闭环方式增…...
6.Python 函数进阶(函数多返回值、函数多种传参方式、匿名函数)
一、函数多返回值 1、具体实现 def test_return():return 1, 2x, y test_return()print(x) print(y)输出结果 1 22、解析 按照返回值的顺序,用对应顺序的多个变量接收,变量之间用逗号(,)隔开 支持返回不同类型的数据 二、函…...
视频汇聚平台EasyCVR支持云端录像丨监控存储丨录像回看丨录像计划丨录像配置
EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。平台以其强大的视频处理、汇聚与融合能力,在构建视频监控系统中展现出了独特的优势。 EasyCVR视频汇聚平台可接入传统监控行业中高清网络摄像机的RTSP…...
【Spring】获取 Cookie和Session
回顾 Cookie HTTP 协议自身是属于“无状态”协议 无状态:默认情况下,HTTP 协议的客户端和服务器之间的这次通信和下次通信之间没有直接的联系 但是在实际开发中,我们很多时候是需要知道请求之间的关联关系的 例如登录网站成功后ÿ…...
MyBatis-Plus 的核心插件及其使用介绍
MyBatis-Plus 是基于 MyBatis 的增强工具,为简化 MyBatis 的开发提供了诸多功能扩展。它的目标是减少重复代码、提高开发效率,提供了 CRUD(Create, Read, Update, Delete)操作的简化方法以及多种实用插件。以下是 MyBatis-Plus 的…...
class文件加载到内存
JVM将class文件加载到内存的过程主要分为三个阶段:加载(Loading)、链接(Linking)和初始化(Initialization),其中链接又细分为验证、准备、解析三个步骤 。 一、加载(…...
千问3.5-27B知识库应用:OpenClaw变身技术问答助手
千问3.5-27B知识库应用:OpenClaw变身技术问答助手 1. 为什么需要本地化技术问答助手? 去年我在开发一个开源项目时,遇到了一个奇怪的Docker网络问题。当时在Stack Overflow上搜索了半天,找到的答案要么过时,要么不适…...
STM32开发中的C语言核心技巧与实战
1. STM32开发中的C语言核心技巧解析从事嵌入式开发十多年来,我深刻体会到C语言在STM32单片机开发中的核心地位。与通用计算机编程不同,嵌入式C语言需要直接操作硬件寄存器,对代码的精确性和效率要求极高。下面我将分享几个在STM32开发中最实用…...
集团型企业BI试点,为什么一定要先做多域资源隔离?
艾瑞咨询《2025年中国BI市场报告》显示,超7成集团型企业的首次BI试点项目因跨业务单元权限冲突、数据口径混乱延期或终止(统计样本覆盖120家年营收超50亿的国内集团企业,统计窗口为2022-2024年试点项目全生命周期)。这个数据和大部…...
避坑指南:Maya LiveLink插件安装常见报错解决方案(附FBX传输优化技巧)
Maya LiveLink插件避坑实战:从安装报错到FBX传输优化的全流程指南 每次打开Maya准备大干一场时,那个熟悉的.mll加载失败弹窗就像个不速之客——特别是当你需要在截止日期前完成虚幻引擎的动画对接时。作为连接Maya与虚幻引擎的神经中枢,LiveL…...
C++ 地址空间随机化(ASLR):探讨 C++ 动态链接库在内存布局上的安全特性
尊敬的各位同仁,各位对系统安全和C编程充满热情的开发者们,大家下午好!今天,我们齐聚一堂,共同探讨一个在现代软件安全领域至关重要的主题——地址空间布局随机化(ASLR),特别是它如何…...
2.2.2.3 Spark实战:词频统计
本次实战涵盖了Spark词频统计(WordCount)的两种主流实现方式。首先,利用Scala在spark-shell中完成从读取文件、flatMap分词、map映射到reduceByKey聚合的完整流程,并实现结果的降序排序。其次,针对Spark 3.3.2版本的需…...
51单片机实战:从零构建电子密码锁系统
1. 项目背景与硬件准备 第一次接触51单片机时,我就被它的实用性深深吸引。作为电子爱好者入门的最佳选择,STC89C52这款经典芯片就像乐高积木的基础模块——价格亲民(某宝20元就能买到开发板)、资源丰富(8K Flash、512…...
PyTorch 2.8镜像真实效果:物理实验→电磁场/流体力学可视化视频
PyTorch 2.8镜像真实效果:物理实验→电磁场/流体力学可视化视频 1. 开箱即用的专业级物理模拟环境 当你第一次启动这个基于RTX 4090D优化的PyTorch 2.8镜像时,最直接的感受就是"专业工具就该这样"。这个镜像不是普通的深度学习环境ÿ…...
从YOLOv8到RTDETR:如何将训练后的YOLO指标无缝转换为COCO格式
1. 为什么需要YOLO到COCO格式转换 当你用YOLOv8官方代码训练RTDETR模型时,会发现评估结果默认输出的是YOLO格式指标。但学术界和工业界普遍采用COCO评估标准,这就好比在中国用人民币交易,到了欧洲就得换成欧元。我在去年帮某无人机公司做目标…...
