推荐答案
// www.javascriptcn.com code example
import 'dart:async';
void main() {
// 创建一个 StreamController
final StreamController<int> controller = StreamController<int>();
// 监听 Stream
final StreamSubscription<int> subscription = controller.stream.listen(
(data) {
print('Received data: $data');
},
onError: (error) {
print('Error occurred: $error');
},
onDone: () {
print('Stream is done');
},
);
// 向 Stream 中添加数据
controller.add(1);
controller.add(2);
controller.add(3);
// 关闭 StreamController
controller.close();
}本题详细解读
1. StreamController 的作用
StreamController 是 Dart 中用于管理 Stream 的工具类。它允许你手动控制数据的发送、错误处理以及流的关闭。StreamController 通常用于需要手动控制数据流的场景,比如事件处理、数据广播等。
2. 创建 StreamController
你可以通过 StreamController<T>() 来创建一个 StreamController,其中 T 是流中数据的类型。例如,StreamController<int> 表示这个流将处理整数类型的数据。
3. 监听 Stream
通过 controller.stream.listen() 方法可以监听 Stream 中的数据。listen 方法有三个可选参数:
onData: 当有数据到达时调用的回调函数。onError: 当发生错误时调用的回调函数。onDone: 当流关闭时调用的回调函数。
4. 向 Stream 中添加数据
使用 controller.add(data) 方法可以向流中添加数据。每次调用 add 方法,监听器都会收到这个数据。
5. 关闭 StreamController
当不再需要向流中添加数据时,应该调用 controller.close() 来关闭 StreamController。关闭后,流将不再接受新的数据,并且会触发 onDone 回调。
6. 注意事项
- 确保在不再需要
StreamController时关闭它,以避免内存泄漏。 - 如果需要在多个地方监听同一个流,可以使用
StreamController.broadcast()创建一个广播流。