深入理解Flutter中的StreamSubscription和StreamController
在Flutter中,StreamSubscription
和StreamController
是用于处理流(stream)的两个核心类。
StreamController
是用来创建流的,它可以被用来发送事件(通过sink
属性)和接收订阅(通过stream
属性)。
StreamSubscription
是当你订阅一个流时,你会得到一个StreamSubscription
对象。它可以用来取消订阅(cancel
方法),在某些情况下,可以更改流的行为(如pause
和resume
)。
以下是一个简单的例子,展示如何创建一个流,如何订阅这个流,以及如何取消订阅:
import 'dart:async';
void main() {
// 创建StreamController
final StreamController<String> controller = StreamController<String>();
// 发送事件
controller.sink.add('事件1');
controller.sink.add('事件2');
// 订阅流
StreamSubscription<String> subscription = controller.stream.listen((data) {
print(data);
}, onDone: () {
print('Stream completed');
}, onError: (e) {
print('Error: $e');
});
// 在适当的时候取消订阅
Future.delayed(Duration(seconds: 2), () {
subscription.cancel();
});
// 关闭StreamController,通常在你的widget dispose方法中调用
// controller.close();
}
在这个例子中,我们创建了一个StreamController
,然后通过它的sink
属性发送了两个事件。我们订阅了由StreamController
创建的stream
,并且在接收到两个事件后取消订阅。注意,在实际的Flutter应用中,你应该在widget的dispose
方法中取消订阅,并且关闭StreamController
,以防止内存泄漏。
评论已关闭