getResponseAsync method

  1. @override
Stream<String> getResponseAsync({
  1. Message? message,
})
override

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;
  }
}