Flutter---Stream

概念:Stream 是一个异步数据序列,可以连续地发出多个值(而不是像 Future 只返回一个值)。

创建Stream的方式:在实际开发中,StreamController 是最常用、最实用的创建流的方式。

最基本的 StreamController 使用

Dart 复制代码
import 'dart:async';

void main() {
  // 1. 创建 StreamController
  final controller = StreamController<int>();
  
  // 2. 获取流并进行监听
  controller.stream.listen(
    (data) {
      print('收到数据: $data');
    },
    onError: (error) {
      print('出错: $error');
    },
    onDone: () {
      print('流结束了');
    },
  );
  
  // 3. 往流里添加数据
  controller.add(1);    // 输出: 收到数据: 1
  controller.add(2);    // 输出: 收到数据: 2
  controller.add(3);    // 输出: 收到数据: 3
  
  // 4. 添加错误
  // controller.addError('这是一个错误');
  
  // 5. 关闭流
  controller.close();   // 输出: 流结束了
}

StreamController 的核心概念

Dart 复制代码
StreamController = 水管的总阀门
     ↓
controller.stream = 水管的出口
     ↓
.listen() = 在水管出口接个水桶接水
     ↓
controller.add() = 从阀门往里倒水
     ↓
controller.close() = 关闭总阀门

使用StreamController创建单订阅流 / 多订阅流

Dart 复制代码
void streamTypes() {
  // 1. 单订阅流 (默认) - 只能有一个监听器
  final singleStream = StreamController<int>();
  singleStream.stream.listen((data) => print('监听器1: $data'));
  // singleStream.stream.listen((data) => print('监听器2: $data')); // 错误!
  
  // 2. 广播流 - 可以有多个监听器
  final broadcastStream = StreamController<int>.broadcast();
  broadcastStream.stream.listen((data) => print('广播监听器1: $data'));
  broadcastStream.stream.listen((data) => print('广播监听器2: $data')); // 可以!
  
  // 添加数据
  singleStream.add(1);
  broadcastStream.add(1);
  
  singleStream.close();
  broadcastStream.close();
}

关键点

Dart 复制代码
创建:StreamController<T> controller = StreamController<T>();

监听:controller.stream.listen((数据) { ... });

发送数据:controller.add(数据);

发送错误:controller.addError(错误);

关闭:controller.close();

广播流:StreamController<T>.broadcast()(多个监听器)
相关推荐
亚空间仓鼠16 分钟前
OpenEuler系统常用服务(五)
linux·运维·服务器·网络
开心码农1号24 分钟前
Java rabbitMQ如何发送、消费消息、全套可靠方案
java·rabbitmq·java-rabbitmq
蜡台33 分钟前
JetBrains IDEA 安装 卸载相关总结
java·ide·intellij-idea·注册码
WJLSH12333 分钟前
TomCat
java·tomcat
浮芷.42 分钟前
Flutter 框架跨平台鸿蒙开发 - 家庭健康监测云应用
科技·flutter·华为·harmonyos·鸿蒙
世人万千丶1 小时前
Flutter 框架跨平台鸿蒙开发 - 宠物语言翻译器应用
学习·flutter·华为·开源·harmonyos·鸿蒙
AI成长日志1 小时前
【AI原生开发实战】1.2 传统开发 vs AI原生开发:思维转变与架构差异
服务器·架构·ai-native
戮戮1 小时前
Spring Cloud Gateway 零拷贝参数校验:一种高性能网关架构实践
java·网络·架构·gateway
2301_780789661 小时前
零信任架构在云安全落地过程中的最佳实践
服务器·人工智能·游戏·架构·零信任
见山是山-见水是水1 小时前
Flutter 框架跨平台鸿蒙开发 - NPC模拟器
flutter·华为·harmonyos