> 文章列表 > Flutter中的EventSink与StreamSink以及StreamSubscription

Flutter中的EventSink与StreamSink以及StreamSubscription

Flutter中的EventSink与StreamSink以及StreamSubscription

题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧。


Flutter文章目录


StreamSink 是一个 interface 接口,它继承于 StreamConsumer 和 EventSink。
StreamConsumer是一个接口,用于消费流事件,它是Flutter中的一种异步编程模型,用于处理数据流。

StreamSink 可以用于以下场景:

  • 在 Flutter 中,StreamSink 可以用于将用户输入添加到一个输入流中,以便在 UI 上显示
  • 在 Dart 中,StreamSink 可以用于将数据添加到一个流中,以便在其他地方使用
  • StreamSink 还可以用于将错误添加到流中,以便在其他地方处理错误

// 创建一个 StreamController
StreamController<int> controller = StreamController<int>();// 获取 StreamSink,它是 EventSink 的一个实现
StreamSink<int> sink = controller.sink;// 添加数据到 Stream 中
sink.add(1);
sink.add(2);
sink.add(3);// 关闭 StreamController
sink.close();// 创建一个 StreamSubscription 来监听 Stream 中的数据
StreamSubscription<int> subscription = controller.stream.listen((data) {print('Data: $data');
});// 输出:
// Data: 1
// Data: 2
// Data: 3

EventSink是一个抽象类,它提供了一个add方法,用于将事件添加到流中。

import 'dart:async';// Create a custom EventSink
class CustomEventSink implements EventSink<String> {final EventSink<String> _eventSink;CustomEventSink(this._eventSink);void add(String data) {// Add custom logic here_eventSink.add(data);}void addError(Object error, [StackTrace? stackTrace]) {// Add custom error handling here_eventSink.addError(error, stackTrace);}void close() {// Add custom logic here_eventSink.close();}
}// Create a StreamController and use the custom EventSink
void main() {final controller = StreamController<String>.broadcast(sync: true,onListen: () => print('Listening...'),onCancel: () => print('Cancelled!'),);final customSink = CustomEventSink(controller.sink);controller.stream.listen(print);customSink.add('Hello, world!');customSink.close();
}

StreamSubscription 是什么?

StreamSubscription 是用于监听 Stream 中数据、错误和完成事件的对象。它提供了多个方法,包括 onData、onError、onDone、pause、resume 和 cancel。通过这些方法,我们可以对 StreamSubscription 进行控制,例如暂停、恢复和取消订阅。

StreamSubscription的常用方法包括:

  1. onData:用于监听Stream中的数据,每当有新的数据时就会调用该方法。
  2. onError:用于监听Stream中的错误,每当有错误发生时就会调用该方法。
  3. onDone:用于监听Stream中的完成事件,当Stream完成时就会调用该方法。
  4. pause:用于暂停StreamSubscription,暂停后不再接收新的数据。
  5. resume:用于恢复StreamSubscription,恢复后可以继续接收数据。
  6. cancel:用于取消StreamSubscription,取消后不再接收数据。

以下是一个示例代码:

// 创建一个 StreamController
StreamController<int> controller = StreamController<int>();// 获取 StreamSubscription,用于监听 Stream 中的数据、错误和完成事件
StreamSubscription<int> subscription = controller.stream.listen((data) {print('Data: $data');},onError: (error) {print('Error: $error');},onDone: () {print('Done');},
);

// 添加数据到 Stream 中
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);// 暂停 StreamSubscription
subscription.pause();// 添加数据到 Stream 中
controller.sink.add(4);
controller.sink.add(5);// 恢复 StreamSubscription
subscription.resume();// 添加数据到 Stream 中
controller.sink.add(6);// 关闭 StreamController
controller.sink.close();// 取消 StreamSubscription
subscription.cancel();