带你读《深入浅出Dart》十七、Dart的Stream(2)

简介: 带你读《深入浅出Dart》十七、Dart的Stream(2)

带你读《深入浅出Dart》十七、Dart的Stream(1)https://developer.aliyun.com/article/1348632?groupCode=tech_library


3.转换 Stream

Stream API 提供了许多方法来转换 Stream。例如,你可以使用 map 方法来处理每个数据事件,或者使用 where 方法来过滤数据事件:

 

void main() async {
  var stream = Stream.fromIterable([1, 2, 3, 4, 5]);
  var evenStream = stream.where((event) => event % 2 == 0).map((event) => event * 2);
  await for (var event in evenStream) {
    print(event);  // 输出:4, 8
  }}

 

在这个示例中,我们首先使用 where 方法创建了一个只包含偶数的 Stream,然后我们使用 map 方法将每个偶数乘以 2。

4.组合 Stream

你还可以使用 StreamZip StreamGroup 来组合多个 Stream。例如,你可以使用 StreamZip 来同步处理两个 Stream 的数据事件:

 

void main() async {
  var stream1 = Stream.periodic(Duration(seconds: 1), (x) => x).take(5);
  var stream2 = Stream.periodic(Duration(seconds: 2), (x) => x).take(3);
  var zippedStream = StreamZip([stream1, stream2]);
  await for (var event in zippedStream) {
    print(event);  // 输出:[0, 0], [1, 1], [2, 2]
  }}

5.Stream的应用场景

好的,让我详细地解释一下上述的几个应用场景,并提供一些具体的代码示例:

用户界面交互

在 Flutter 等 Dart 构建的应用程序中,Stream 可以用来监听并响应用户的交互行为。例如,你可以创建一个自定义的 StreamController,并使用它来监听按钮点击事件:

 

// 创建一个 StreamControllerStreamController controller = StreamController();
void main() {
  // 按钮点击事件监听
  controller.stream.listen((data) {
    print("Button clicked: $data");
  });
  // 模拟按钮点击
  controller.sink.add('Button 1');}
// 在你的 UI 中,当按钮被点击时,你可以调用 controller.sink.add 来发送一个事件。

网络请求

在进行网络请求时,服务器的响应通常会分成多个数据包。你可以使用 Stream 来连续地接收和处理这些数据包,这样你就可以在不等待整个响应完成的情况下开始处理数据:

 

import 'dart:convert';import 'dart:io';
void main() async {
  var client = HttpClient();
  client.getUrl(Uri.parse('https://api.github.com/users/dart-lang/repos'))
    .then((HttpClientRequest request) {
      return request.close();
    })
    .then((HttpClientResponse response) {
      response.transform(Utf8Decoder()).listen((contents) {
        print(contents);
      });
    });}


带你读《深入浅出Dart》十七、Dart的Stream(3)https://developer.aliyun.com/article/1348629?groupCode=tech_library

相关文章
|
SQL 安全 数据管理
DMS产品常见问题之DMS里任务执行失败如何解决
DMS(数据管理服务,Data Management Service)是阿里云提供的一种数据库管理和维护工具,它支持数据的查询、编辑、分析及安全管控;本汇总集中了DMS产品在实际使用中用户常遇到的问题及其相应的解答,目的是为使用者提供快速参考,帮助他们有效地解决在数据管理过程中所面临的挑战。
|
Dart 数据处理
带你读《深入浅出Dart》十七、Dart的Stream(3)
带你读《深入浅出Dart》十七、Dart的Stream(3)
253 0
带你读《深入浅出Dart》十七、Dart的Stream(1)
带你读《深入浅出Dart》十七、Dart的Stream(1)
241 0
|
域名解析 缓存 网络协议
|
缓存 Shell 应用服务中间件
|
存储 算法 编译器
C++ 泛型编程与STL技术
模板的概念 模板就是建立通用的模具,大大提高复用性 例如生活中的模板 一寸照片模板: PPT模板: 模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 函数模板 C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 函数模板语法 函数模板作用: 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。 语法: template<typename T> 函数声明或定义 1 2 解释: template — 声明创建模板 typename — 表面其后面的符号是一
288 0
|
运维 专有云 云计算
云计算网络基础架构的实践和演进——打造云计算网络基石
从传统IT部署到云,人肉运维已经是过去式,云上运维该怎么开展?人工智能对于运维“威胁论”也随之袭来,如何去做更智能的活,当下很多运维人在不断思考和探寻答案。在2017云栖社区运维/DevOps在线技术峰会上,阿里云专家云登就为大家分享了云计算网络基础架构的实践和演进,精彩不容错过。
25117 0

热门文章

最新文章