uploadFile method

Future<Map<String, dynamic>> uploadFile({
  1. required String stepName,
  2. required String fieldName,
  3. required List<int> fileBytes,
  4. required String fileName,
})

Upload a file (document photo, selfie, etc.) to the backend.

Implementation

Future<Map<String, dynamic>> uploadFile({
  required String stepName,
  required String fieldName,
  required List<int> fileBytes,
  required String fileName,
}) async {
  final url = Uri.parse(
    '${config.baseUrl}/api/v1/sessions/${config.sessionId}/upload',
  );

  final request = http.MultipartRequest('POST', url)
    ..headers.addAll({'Authorization': 'Bearer ${config.sessionToken}'})
    ..fields['step'] = stepName
    ..files.add(http.MultipartFile.fromBytes(
      fieldName,
      fileBytes,
      filename: fileName,
    ));

  final streamedResponse = await _client.send(request);
  final response = await http.Response.fromStream(streamedResponse);

  if (response.statusCode != 200 && response.statusCode != 201) {
    throw DataleonApiException(
      'Failed to upload file for step $stepName',
      statusCode: response.statusCode,
    );
  }

  return jsonDecode(response.body) as Map<String, dynamic>;
}