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

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

十七、Dart的Stream

Stream 是 Dart 中处理连续的异步事件的工具。例如,你可以使用 Stream 来读取文件的内容,或者监听用户的鼠标点击。

 

一个简单的 Stream 示例:

Future main() async {
  var stream = Stream.fromIterable([1, 2, 3, 4, 5]);
  await for (var number in stream) {
    print(number);  // 输出:1, 2, 3, 4, 5
  }}

 

在这个示例中,我们使用 Stream.fromIterable 创建了一个 Stream,它将连续地产生 1 到 5 这五个数字。然后我们使用 await for 循环来监听 Stream 的事件。

 

如果你需要在监听 Stream 的过程中处理错误,你可以使用 try/catch

 

Future main() async {
  var stream = Stream.periodic(
    Duration(seconds: 1),
    (x) {
      if (x == 3) {
        throw Exception('Error!');
      } else {
        return x;
      }
    },
  ).take(5);
  try {
    await for (var number in stream) {
      print(number);
    }
  } catch (error) {
    print(error);
  }}

1.创建 Stream

在 Dart 中,你可以使用多种方式来创建 Stream。前面我们已经见到了 Stream.fromIterable,下面是一些其他的方法:

 

  • Stream.empty:创建一个不产生任何事件的 Stream。
  • Stream.error:创建一个只产生一个错误事件的 Stream。
  • Stream.periodic:创建一个周期性地产生事件的 Stream。
  • StreamController:手动控制 Stream 的事件和错误。

例如,我们可以使用 StreamController 创建一个 Stream,并手动控制其事件和错误:

void main() async {
  var controller = StreamController();
  controller.sink.add(1);
  controller.sink.add(2);
  controller.sink.addError('Oops!');
  controller.sink.add(3);
  controller.close();
  await for (var event in controller.stream) {
    print(event);
  }}

 

在这个示例中,我们首先创建了一个 StreamController。然后我们使用 sink.add 方法添加了三个事件,使用 sink.addError 方法添加了一个错误。最后我们使用 controller.close 方法表示我们不会再添加任何事件或错误。

2.处理 Stream 事件

我们可以使用 Stream.listen 方法监听 Stream 的事件:

 

void main() {
  var stream = Stream.fromIterable([1, 2, 3, 4, 5]);
  stream.listen(
    (event) {
      print('Received event: $event');
    },
    onError: (error) {
      print('Received error: $error');
    },
    onDone: () {
      print('All done');
    },
  );}



在这个示例中,我们监听了 Stream 的数据事件、错误事件和完成事件。


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

相关文章
|
Dart API
带你读《深入浅出Dart》十七、Dart的Stream(2)
带你读《深入浅出Dart》十七、Dart的Stream(2)
|
Dart 数据处理
带你读《深入浅出Dart》十七、Dart的Stream(3)
带你读《深入浅出Dart》十七、Dart的Stream(3)
带你读《深入浅出Dart》十八、Dart的Isolate(1)
带你读《深入浅出Dart》十八、Dart的Isolate(1)
|
自然语言处理 Dart
带你读《深入浅出Dart》五、函数
带你读《深入浅出Dart》五、函数
|
存储 Dart 索引
带你读《深入浅出Dart》六、Dart中的集合类型(1)
带你读《深入浅出Dart》六、Dart中的集合类型(1)
带你读《深入浅出Dart》十一、Dart模块化详解
带你读《深入浅出Dart》十一、Dart模块化详解
带你读《深入浅出Dart》十二、Dart库的使用和创建(1)
带你读《深入浅出Dart》十二、Dart库的使用和创建(1)
带你读《深入浅出Dart》六、Dart中的集合类型(2)
带你读《深入浅出Dart》六、Dart中的集合类型(2)
|
Dart API 数据处理
《深入浅出Dart》Dart的Stream
Dart的Stream Stream 是 Dart 中处理连续的异步事件的工具。例如,你可以使用 Stream 来读取文件的内容,或者监听用户的鼠标点击。 一个简单的 Stream 示例:
189 0
|
存储 Dart JavaScript
《深入浅出Dart》Dart库的使用和创建
Dart库的使用和创建 引言 在Dart中,代码重用和模块化可以通过库(libraries)和包(packages)实现。一个库就是一组代码,被一起打包为了实现一种或多种特定功能。一个包则是一种发布和分享Dart库的方式。在这一章,我们将详细介绍如何使用和创建Dart库和包,以及如何实现一个具有大数相加功能的库。 Dart库的使用
138 0