mergeStreams method
Merges events from multiple streams into this controller.
All events and errors from the provided streams are forwarded to this controller. The returned Future completes when all streams have ended.
Implementation
Future<void> mergeStreams(List<Stream<T>> streams) async {
if (streams.isEmpty) {
return;
}
final completer = Completer<void>();
var completedCount = 0;
final subscriptions = <StreamSubscription<T>>[];
for (final stream in streams) {
final subscription = stream.listen(
safeAdd,
onError: _handleDynamicOnError,
onDone: () {
completedCount++;
if (completedCount == streams.length && !completer.isCompleted) {
completer.complete();
}
},
);
subscriptions.add(subscription);
}
// Cancel any active subscriptions if the controller is closed.
if (isClosed && !completer.isCompleted) {
for (final sub in subscriptions) {
await sub.cancel();
}
completer.complete();
}
return completer.future;
}