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

【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&#xff0c;它为 Dart 的 Stream 添加了额外的功能。 2.功能 &#xff08;1&#xff09;合并多个流Stream 借助Rx.combineLatest2()合并两个流stream1和stream2。 注意&#xff1a;如果dart文件中同时使用了getx&#xff0c;需要隐…...

【SQL学习笔记】

Pycharm社区版的页面中无database选项&#xff1f; 1、进入Setting-Pluggins窗口&#xff0c;输入database navigator 2、安装后&#xff0c;重启即可 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层 1、Server 层负责建⽴连接、分析和执⾏ SQL 2、存储引擎层负…...

contact form 7设置方法与详细步骤

Contact Form 7(CF7)是WordPress中非常流行的表单插件&#xff0c;用于创建和管理网站上的联系表单。以下是Contact Form 7的设置方法与详细步骤&#xff1a; 一、安装Contact Form 7插件 从WordPress后台安装&#xff1a; 登录WordPress后台&#xff0c;进入“插件”菜单下…...

第170天:应急响应-战中溯源反制对抗上线CSGoby蚁剑Sqlmap等安全工具

目录 案例一&#xff1a;溯源反制-Webshell工具-Antsword 案例二&#xff1a;溯源反制-SQL注入工具-SQLMAP 案例三&#xff1a;溯源反制-漏洞扫描工具-Goby 案例四&#xff1a;溯源反制-远程控制工具-CobaltStrike 反制Server&#xff0c;爆破密码&#xff08;通用&#x…...

5-容器管理工具Docker

├──5-容器管理工具Docker | ├──1-容器管理工具Docker | | ├──1-应用部署容器化演进之路 | | ├──2-容器技术涉及Linux内核关键技术 | | ├──3-Docker生态架构及部署 | | ├──4-使用容器运行Nginx及docker命令介绍 | | ├──5-容器镜像介…...

OCR+PDF解析配套前端工具开源详解!

目录 一、项目简介 TextIn为相关领域的前端开发提供了优秀的范本。 目前项目已在Github上开源&#xff01; 二、性能特色 三、安装使用 安装依赖启动项目脚本命令项目结构 四、效果展示 面对日常生活和工作中常见的OCR识别、PDF解析、翻译、校对等场景&#xff0c;配套的…...

【操作系统】引导(Boot)电脑的奇妙开机过程

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 什么是操作系统的引导&#xff1f; 操作系统的引导&#xff08;开机过程&#xff09; Windows操作系…...

国产云桌面迁移对接信创AD域控方案

在前文《替换AD域时&#xff0c;网络准入场景如何迁移对接国产身份域管&#xff1f;》中&#xff0c;根据 AD 在企业中的应用程度&#xff0c;我们将企业分为了轻度、中度及深度三类微软 AD 用户。 轻度AD用户&#xff1a;仅部分应用对接 AD 。替换 AD 时&#xff0c;可能会直接…...

ESP32—C3实现DS18B20(温度传感器)检测温度(Arduino IED )

1源代码&#xff08;DS18B20&#xff09; #include <OneWire.h> // 引入OneWire库&#xff0c;用于与单总线设备通信 #include <DallasTemperature.h> // 引入DallasTemperature库&#xff0c;用于读取DS18B20温度传感器数据// 定义连接到DS18B20数据引脚的GPIO编…...

Linux系统中安装KenLM步骤及注意事项

一、前言&#xff1a; Kenlm模型&#xff1a;本项目基于Kenlm统计语言模型工具训练了中文NGram语言模型&#xff0c;结合规则方法、混淆集可以纠正中文拼写错误&#xff0c;方法速度快&#xff0c;扩展性强&#xff0c;效果一般 二、安装步骤&#xff1a; 1、安装依赖项 Ke…...

xss-labs靶场第六关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…...

传智杯 第六届—E

题目描述&#xff1a; leafee 最近爱上了 abb 型语句&#xff0c;比如“叠词词”、“恶心心”。 leafee 拿到了一个只含有小写字母的字符串&#xff0c;她想知道有多少个 "abb" 型的子序列&#xff1f; 定义&#xff1a; abb 型字符串满足以下条件&#xff1a; 字符…...

2024.10月12日--- SpringMVC异常处理

异常处理 SpringMVC处理异常的方式有三种&#xff0c;当然也可以使用AOP面向编程&#xff0c;自定义一个类进入切入。 第一种&#xff1a;使用SpringMVC提供的简单异常处理器SimpleMappingExceptionResolver <!--SpringMVC提供的异常处理器类型&#xff1a;SimpleMappingE…...

边缘人工智能(Edge Intelligence)

边缘人工智能&#xff08;Edge AI&#xff09;是指在边缘设备上直接运行人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;算法的技术。机器学习是一个广泛的领域&#xff0c;近年来取得了巨大的进步。它所基于的原则是&#xff0c;计算机可以通过从数据…...

C++20主要特性

Concepts&#xff08;概念&#xff09;&#xff1a; Concepts 是一种新的语言特性&#xff0c;允许程序员明确定义类型的要求&#xff0c;从而提高了模板代码的可读性和错误消息的质量。 template <typename T> concept Integral std::is_integral_v<T>;template…...

IterComp: 从模型图库中迭代合成感知反馈学习,用于文本到图像的生成

我们从多个模型中收集组成感知模型偏好&#xff0c;并采用迭代反馈学习方法&#xff0c;使基础扩散模型和奖励模型都能逐步自我完善。 我们提出了一种迭代反馈学习方法&#xff0c;通过多次迭代&#xff0c;使基础扩散模型和奖励模型逐步自我完善&#xff0c;从而以闭环方式增…...

6.Python 函数进阶(函数多返回值、函数多种传参方式、匿名函数)

一、函数多返回值 1、具体实现 def test_return():return 1, 2x, y test_return()print(x) print(y)输出结果 1 22、解析 按照返回值的顺序&#xff0c;用对应顺序的多个变量接收&#xff0c;变量之间用逗号&#xff08;,&#xff09;隔开 支持返回不同类型的数据 二、函…...

视频汇聚平台EasyCVR支持云端录像丨监控存储丨录像回看丨录像计划丨录像配置

EasyCVR视频汇聚融合平台&#xff0c;是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。平台以其强大的视频处理、汇聚与融合能力&#xff0c;在构建视频监控系统中展现出了独特的优势。 EasyCVR视频汇聚平台可接入传统监控行业中高清网络摄像机的RTSP…...

【Spring】获取 Cookie和Session

回顾 Cookie HTTP 协议自身是属于“无状态”协议 无状态&#xff1a;默认情况下&#xff0c;HTTP 协议的客户端和服务器之间的这次通信和下次通信之间没有直接的联系 但是在实际开发中&#xff0c;我们很多时候是需要知道请求之间的关联关系的 例如登录网站成功后&#xff…...

MyBatis-Plus 的核心插件及其使用介绍

MyBatis-Plus 是基于 MyBatis 的增强工具&#xff0c;为简化 MyBatis 的开发提供了诸多功能扩展。它的目标是减少重复代码、提高开发效率&#xff0c;提供了 CRUD&#xff08;Create, Read, Update, Delete&#xff09;操作的简化方法以及多种实用插件。以下是 MyBatis-Plus 的…...

实在Agent物流对账全流程自动化方案与落地案例:2026智享财务新标杆

在2026年5月这个生成式AI深度重构实体经济的关键周期&#xff0c;全球物流行业已全面跨入“智能体&#xff08;Agent&#xff09;常态化运营”时代。根据《2026年全球供应链数字化趋势报告》显示&#xff0c;超过65%的大型物流企业已部署了具备自主决策能力的智能体来替代传统的…...

卡片刷新三板斧:定时、定点、主动请求——搞清楚才不会乱

文章目录先搞明白谁在控制刷新方式一&#xff1a;定时刷新&#xff08;updateDuration&#xff09;方式二&#xff1a;定点刷新&#xff08;scheduledUpdateTime&#xff09;方式三&#xff1a;主动请求刷新&#xff08;formHost.requestForm&#xff09;三种方式对比卡片 UI 接…...

RAG实战指南:让大模型学会检索外部知识

RAG&#xff1a;给 LLM 装上知识库——从原理到完整可运行系统LLM 的知识截止在训练日期。RAG 让 AI 能「查资料」回答——这是 Agent 有「长期记忆」的基础。一、为什么需要 RAG 用户&#xff1a;HarmonyOS NEXT 的 Observed 装饰器怎么用&#xff1f;没有 RAG 的 LLM&#xf…...

硬件入门 + 单片机基础(第14天)综合通信实训

ESP32 物联网结业项目&#xff1a;WiFi MQTT 继电器 温湿度 整合完整版 项目说明 这是物联网综合结业项目&#xff0c;整合了你学过的所有核心技术&#xff1a; WiFi 自动联网 断网重连MQTT 远程控制继电器&#xff08;开关&#xff09;DHT11 温湿度自动上报心跳包 消息…...

高性能WebGL地图引擎OME:海量地理空间数据可视化实战指南

1. 项目概述与核心价值 如果你在开源社区里混迹过一段时间&#xff0c;尤其是对数据可视化、地理信息系统或者大规模图数据渲染感兴趣&#xff0c;那么“sgl-project/ome”这个项目标题很可能已经引起了你的注意。OME&#xff0c;全称可能是“Open Map Engine”或类似的概念&am…...

在线水印怎么去除?2026年最新在线水印去除方法与工具推荐

图片、视频上的水印是版权保护的常见方式&#xff0c;但在内容创作、素材整理或个人使用时&#xff0c;有时需要移除这些标记。在线水印去除工具因为无需下载安装、跨平台兼容而成为不少人的选择。本文汇总了2026年实用的在线水印去除方法和工具推荐&#xff0c;帮你快速找到适…...

DuckDuckGo AI本地代理服务:开源工具部署与API调用指南

1. 项目概述&#xff1a;一个为DuckDuckGo AI聊天功能提供本地化服务的开源工具如果你和我一样&#xff0c;是个重度搜索用户&#xff0c;同时又对AI聊天功能有高频需求&#xff0c;那你肯定对DuckDuckGo不陌生。作为一个主打隐私保护的搜索引擎&#xff0c;它最近也跟上了潮流…...

如何高效管理光盘镜像:WinCDEmu虚拟光驱专业使用指南

如何高效管理光盘镜像&#xff1a;WinCDEmu虚拟光驱专业使用指南 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu WinCDEmu是一款功能强大的开源虚拟光驱软件&#xff0c;专为Windows系统设计&#xff0c;提供高效的光盘镜像挂载与管…...

TalkingHeads开源项目:基于扩散模型的AI人脸说话视频生成技术详解

1. 项目概述&#xff1a;当AI学会“眉目传情” 最近在折腾一个挺有意思的开源项目&#xff0c;叫TalkingHeads。简单来说&#xff0c;它能让一张静态的人脸照片“活”过来&#xff0c;不仅能根据你输入的音频或文本生成口型同步的说话视频&#xff0c;还能让视频里的人做出各种…...

智能视觉组的比赛方案建议

简 介&#xff1a; 【智能视觉组比赛评分改进建议】针对不同比赛地图导致成绩评判不公的问题&#xff0c;建议赛前准备多张固定地图并测算标准时间&#xff1a;1&#xff09;由官方测试每张地图的理论最优时间和实际小车运行时间&#xff1b;2&#xff09;比赛成绩以选手用时与…...