推荐答案
在 Dart 中,可以通过 listen 方法来监听 Stream。listen 方法允许你指定一个回调函数,当 Stream 发出数据时,这个回调函数会被触发。你还可以指定 onError、onDone 和 cancelOnError 等参数来处理错误、完成事件以及是否在发生错误时取消订阅。
// www.javascriptcn.com code example
stream.listen(
(data) {
// 处理数据
print('Data: $data');
},
onError: (error) {
// 处理错误
print('Error: $error');
},
onDone: () {
// 处理完成事件
print('Stream is done');
},
cancelOnError: true, // 是否在发生错误时取消订阅
);本题详细解读
1. listen 方法的基本用法
listen 方法是 Stream 类中的一个核心方法,用于订阅 Stream 并监听其发出的事件。它接受一个回调函数作为参数,这个回调函数会在 Stream 发出数据时被调用。
stream.listen((data) {
print('Data: $data');
});2. 处理错误
listen 方法还允许你通过 onError 参数来处理 Stream 中可能发生的错误。onError 是一个可选参数,接受一个回调函数,当 Stream 发生错误时,这个回调函数会被调用。
stream.listen(
(data) {
print('Data: $data');
},
onError: (error) {
print('Error: $error');
},
);3. 处理完成事件
onDone 参数用于处理 Stream 完成的事件。当 Stream 关闭时,onDone 回调函数会被调用。
stream.listen(
(data) {
print('Data: $data');
},
onDone: () {
print('Stream is done');
},
);4. 控制错误处理行为
cancelOnError 参数用于控制当 Stream 发生错误时是否取消订阅。如果设置为 true,则在发生错误时自动取消订阅;如果设置为 false,则继续监听 Stream。
// www.javascriptcn.com code example
stream.listen(
(data) {
print('Data: $data');
},
onError: (error) {
print('Error: $error');
},
cancelOnError: true,
);5. 其他注意事项
listen方法返回一个StreamSubscription对象,你可以通过这个对象来手动取消订阅。- 如果你不需要处理错误或完成事件,可以省略
onError和onDone参数。
StreamSubscription subscription = stream.listen((data) {
print('Data: $data');
});
// 手动取消订阅
subscription.cancel();