带你读《深入浅出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

相关文章
带你读《深入浅出Dart》十七、Dart的Stream(1)
带你读《深入浅出Dart》十七、Dart的Stream(1)
156 0
|
7月前
|
开发工具 Android开发 iOS开发
flutter 环境配置
flutter 环境配置
1413 63
|
存储 Dart
Dart的Map类型
Dart的Map类型
234 0
|
Android开发
android基础:Intents 和 intent-filter 的匹配规则
这篇文章详细解释了Android开发中Intent和<intent-filter>的匹配规则,包括Action、Category和Data的解析规则以及如何通过这些规则匹配隐式Intent。
552 1
|
存储 C++ 内存技术
解码mp4文件分别存储为pcm,yuv文件
使用FFmpeg库在C++中解码MP4文件,并将音频数据存储为PCM格式,视频数据存储为YUV格式。
224 3
解码mp4文件分别存储为pcm,yuv文件
|
存储 JavaScript 安全
|
SQL 安全 数据安全/隐私保护
DVWA Open HTTP Redirect 通关解析
DVWA Open HTTP Redirect 通关解析
|
数据安全/隐私保护
okcc呼叫中心隐藏号码如何设置?
要在 OKCC中隐藏号码,可以按照以下步骤进行设置: 1. 登录 OKCC:使用你的帐号和密码登录 OKCC 系统。 2. 进入设置页面:在 OKCC 界面上,找到设置选项或个人配置(可能标记为个人设置、个人信息或用户设置等),点击进入个人设置页面。 3. 寻找“隐藏号码”选项:在个人设置页面中,寻找与号码隐藏相关的选项。可能会显示为“隐藏呼叫者ID”、“匿名呼叫”或类似的选项。 4. 启用号码隐藏:选中“隐藏号码”选项,并确认启用该功能。 5. 应用设置:保存设置并退出个人设置页面,确保设置生效。 请注意,具体的设置流程可能会因 OKCC 版本、界面设计和提供商的设置差异而有所不
okcc呼叫中心隐藏号码如何设置?
|
Linux
centos 查看服务器信息 版本cpu
centos 查看服务器信息 版本cpu
449 0
|
存储 JSON Devops
Ansible最佳实践之 AWX 使用 Ansible 与 API 通信
写在前面 分享一些 AWX 使用 Ansible 与 API 通信的笔记 博文内容涉及: curl 方式调用 AWX API 浏览器接口文档方式调用 AWX API 使用 API 调用方式启动 AWX 中 作业模板 Ansible 模块 uri 的简单介绍 Ansible 剧本方式 调用 API 启动作业模板 理解不足小伙伴帮忙指正
893 0
Ansible最佳实践之 AWX  使用 Ansible 与 API 通信