我无法触发流的 onDone 回调。
我尝试取消流订阅并关闭流控制器,但它不起作用。
这是一个基本示例:
示例代码:
import 'dart:async';
void main() async {
final streamController = StreamController<int>();
final streamSubscription = streamController.stream.listen(
(event) => print('Value emitted: $event'),
onDone: () => print('Task done'),
);
streamController.add(1);
await Future<void>.delayed(Duration.zero);
await streamSubscription.cancel();
await streamController.close();
}
Run Code Online (Sandbox Code Playgroud)
预期输出:
Value emitted: 1
Task done
Run Code Online (Sandbox Code Playgroud)
实际输出:
Value emitted: 1
Run Code Online (Sandbox Code Playgroud)
streamController.close()在您致电之前streamSubscription.cancel(),取消订阅意味着您将不会再收到有关该订阅的任何更多事件,包括onDone,这就是您没有获得最终事件的原因。streamSubscription.cancel()关闭流后将其删除或移动即可。
import 'dart:async';
void main() async {
final streamController = StreamController<int>();
final streamSubscription = streamController.stream.listen(
(event) => print('Value emitted: $event'),
onDone: () => print('Task done'),
);
streamController.add(1);
await Future<void>.delayed(Duration(seconds: 1));
// await streamSubscription.cancel() // comment this out.
await streamController.close();
await streamSubscription.cancel(); // <- here it is fine
}
Run Code Online (Sandbox Code Playgroud)