uploadSingleFile method
Future<String>
uploadSingleFile({
- required String url,
- required String filePath,
- String fileKey = 'file',
- Map<
String, dynamic> ? formData, - Map<
String, dynamic> ? headers, - bool useWithoutToken = false,
- bool cacheResponse = false,
- bool forceOffline = false,
- CancelToken? cancelToken,
- void onSendProgress()?,
- void onProgressPercentage(
- double progress
Implementation
Future<String> uploadSingleFile({
required String url,
required String filePath,
String fileKey = 'file',
Map<String, dynamic>? formData,
Map<String, dynamic>? headers,
bool useWithoutToken = false,
bool cacheResponse = false,
bool forceOffline = false,
CancelToken? cancelToken,
void Function(int, int)? onSendProgress,
void Function(double progress)? onProgressPercentage,
}) async {
try {
if (forceOffline) {
throw {'error': 'File upload requires internet connection'};
}
final formDataMap = FormData.fromMap({
...?formData,
fileKey: await MultipartFile.fromFile(filePath),
});
// Wrap progress callback to include percentage
void Function(int, int)? wrappedOnSendProgress;
if (onSendProgress != null || onProgressPercentage != null) {
wrappedOnSendProgress = (sent, total) {
onSendProgress?.call(sent, total);
if (total > 0) {
final percentage = (sent / total) * 100;
onProgressPercentage?.call(percentage);
}
};
}
final response = await _dio.post(
url,
data: formDataMap,
options: Options(
headers: headers,
extra: {
'useWithoutToken': useWithoutToken,
'cacheResponse': cacheResponse,
},
),
cancelToken: cancelToken,
onSendProgress: wrappedOnSendProgress,
);
print('asfkjasdhfkjh ${response.data}');
return response.data['path'] ?? response.data['url']?? response.data?['data']?['path'] ??response.data?['data']?['url'] ;
} on DioException catch (e) {
throw _handleDioError(e);
}
}