带你读《深入浅出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)
|
Dart 数据处理
带你读《深入浅出Dart》十七、Dart的Stream(3)
带你读《深入浅出Dart》十七、Dart的Stream(3)
带你读《深入浅出Dart》十八、Dart的Isolate(1)
带你读《深入浅出Dart》十八、Dart的Isolate(1)
|
自然语言处理 Dart
带你读《深入浅出Dart》五、函数
带你读《深入浅出Dart》五、函数
带你读《深入浅出Dart》十一、Dart模块化详解
带你读《深入浅出Dart》十一、Dart模块化详解
|
Dart JavaScript 前端开发
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(2)
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(2)
|
Dart JavaScript
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(1)
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(1)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
101 0
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》十二、Dart库的使用和创建(1)
带你读《深入浅出Dart》十二、Dart库的使用和创建(1)

热门文章

最新文章