Skip to content

Commit

Permalink
Use StreamedRequest with onSendProgress in adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
Vovcharaa committed Jul 23, 2023
1 parent ef1ed39 commit d79873b
Showing 1 changed file with 36 additions and 19 deletions.
55 changes: 36 additions & 19 deletions plugins/native_dio_adapter/lib/src/conversion_layer_adapter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,34 +34,51 @@ class ConversionLayerAdapter implements HttpClientAdapter {
RequestOptions options,
Stream<Uint8List>? requestStream,
) async {
final request = Request(
options.method,
options.uri,
);
final BaseRequest request;
if (options.onSendProgress != null && requestStream != null) {
final streamedRequest = StreamedRequest(
options.method,
options.uri,
);
requestStream.listen(
streamedRequest.sink.add,
onDone: streamedRequest.sink.close,
onError: streamedRequest.sink.addError,
cancelOnError: true,
);
request = streamedRequest;
} else {
final simpleRequest = Request(
options.method,
options.uri,
);
if (requestStream != null) {
final completer = Completer<Uint8List>();
final sink = ByteConversionSink.withCallback(
(bytes) => completer.complete(Uint8List.fromList(bytes)),
);
requestStream.listen(
sink.add,
onError: completer.completeError,
onDone: sink.close,
cancelOnError: true,
);
final bytes = await completer.future;
simpleRequest.bodyBytes = bytes;
// simpleRequest.bodyBytes = await ByteStream(requestStream).toBytes();
}
request = simpleRequest;
}

request.headers.addAll(
Map.fromEntries(
options.headers.entries.map((e) => MapEntry(e.key, e.value.toString())),
),
);

request.followRedirects = options.followRedirects;
request.maxRedirects = options.maxRedirects;
request.persistentConnection = options.persistentConnection;

if (requestStream != null) {
final completer = Completer<Uint8List>();
final sink = ByteConversionSink.withCallback(
(bytes) => completer.complete(Uint8List.fromList(bytes)),
);
requestStream.listen(
sink.add,
onError: completer.completeError,
onDone: sink.close,
cancelOnError: true,
);
final bytes = await completer.future;
request.bodyBytes = bytes;
}
return request;
}
}
Expand Down

0 comments on commit d79873b

Please sign in to comment.