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

相关文章
|
文件存储 Docker 智能硬件
DIY nas之casaOS云系统&Home Assistant
CasaOS是一个基于Docker生态系统的开源家庭云系统,专为家庭场景而设计,它可以让您创建自己的云服务器
3159 1
|
人工智能 测试技术 程序员
3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密
通义灵码2.0是阿里巴巴推出的一款智能编程辅助工具,借助AI的强大能力,为开发者提供高效的代码生成、单元测试自动生成及跨语言编程支持。其核心亮点包括: 通义灵码2.0不仅提升了开发效率,还降低了编程门槛,帮助初学者快速上手。强烈推荐给所有开发者! [了解更多](https://hyk52syx.blog.csdn.net/article/details/145642464?spm=1001.2014.3001.5502)
1575 23
|
存储 C++ 内存技术
解码mp4文件分别存储为pcm,yuv文件
使用FFmpeg库在C++中解码MP4文件,并将音频数据存储为PCM格式,视频数据存储为YUV格式。
349 3
解码mp4文件分别存储为pcm,yuv文件
|
JavaScript Linux 应用服务中间件
Docker部署Node应用简单实践
本文将从零至一,介绍如何在云服务器上通过 Docker 容器运行一个简单的Node应用。
3141 0
|
存储 网络协议 网络安全
IP路由详解:网络互联的心脏
【4月更文挑战第22天】
1133 7
IP路由详解:网络互联的心脏
|
SQL 安全 数据安全/隐私保护
DVWA Open HTTP Redirect 通关解析
DVWA Open HTTP Redirect 通关解析
|
存储 JavaScript 安全
|
Android开发
android studio找不到aar问题解决
android studio找不到aar问题解决
959 0
|
存储 编译器 程序员
int 和 long 的区别
int 和 long 的区别
|
数据安全/隐私保护
okcc呼叫中心隐藏号码如何设置?
要在 OKCC中隐藏号码,可以按照以下步骤进行设置: 1. 登录 OKCC:使用你的帐号和密码登录 OKCC 系统。 2. 进入设置页面:在 OKCC 界面上,找到设置选项或个人配置(可能标记为个人设置、个人信息或用户设置等),点击进入个人设置页面。 3. 寻找“隐藏号码”选项:在个人设置页面中,寻找与号码隐藏相关的选项。可能会显示为“隐藏呼叫者ID”、“匿名呼叫”或类似的选项。 4. 启用号码隐藏:选中“隐藏号码”选项,并确认启用该功能。 5. 应用设置:保存设置并退出个人设置页面,确保设置生效。 请注意,具体的设置流程可能会因 OKCC 版本、界面设计和提供商的设置差异而有所不
okcc呼叫中心隐藏号码如何设置?

热门文章

最新文章