getResponseAsync method
Implementation
@override
Stream<String> getResponseAsync({Message? message}) async* {
_assertNotClosed();
await _awaitLastResponse();
final completer = _responseCompleter = Completer<void>();
try {
final controller = _asyncResponseController = StreamController<String>();
eventChannel.receiveBroadcastStream().listen(
(event) {
if (event is Map && event.containsKey('code') && event['code'] == "ERROR") {
controller.addError(Exception(event['message'] ?? 'Unknown async error occurred'));
} else if (event is Map && event.containsKey('partialResult')) {
final partial = event['partialResult'] as String;
controller.add(partial);
} else {
controller.addError(Exception('Unknown event type: $event'));
}
},
onError: (error, st) {
controller.addError(error, st);
},
onDone: controller.close,
);
if (message != null) {
await addQueryChunk(message);
}
unawaited(_platformService.generateResponseAsync());
yield* controller.stream;
} finally {
completer.complete();
_asyncResponseController = null;
}
}