download method

Future<void> download({
  1. required String endpoint,
  2. required String savePath,
  3. required dynamic onSuccess(
    1. File
    )?,
  4. required dynamic onError(
    1. Response
    )?,
  5. required dynamic onException(
    1. dynamic
    )?,
  6. Map<String, String>? headers,
  7. Map<String, dynamic>? queryParams,
})

Implementation

Future<void> download({
  required final String endpoint,
  required final String savePath,
  required final Function(File)? onSuccess,
  required final Function(Response)? onError,
  required final Function(dynamic)? onException,
  final Map<String, String>? headers,
  final Map<String, dynamic>? queryParams,
}) async {
  try {
    final Uri uri = _buildUri(endpoint, queryParams);
    final Request request = Request("GET", uri);
    request.headers.addAll(<String, String>{...defaultHeaders, ...?headers});

    final StreamedResponse response = await _client.send(request).timeout(timeout);

    if (response.statusCode >= 200 && response.statusCode < 300) {
      final File file = File(savePath);
      await response.stream.pipe(file.openWrite());
      onSuccess?.call(file);
    } else {
      onError?.call(await Response.fromStream(response));
    }
  } catch (e) {
    onException?.call(e);
  }
}