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();

你可能感兴趣的:(Flutter项目开发全套教程,flutter,android,android,studio)