download method
Future<Either<NetworkError, dynamic> >
download({
- required String url,
- required String downloadPath,
- required String fileName,
- Map<
String, dynamic> ? queryParameter, - Map<
String, dynamic> ? header, - dynamic onReceiveProgress()?,
override
Implementation
@override
Future<Either<NetworkError, dynamic>> download({
required String url,
required String downloadPath,
required String fileName,
Map<String, dynamic>? queryParameter,
Map<String, dynamic>? header,
Function(int, int)? onReceiveProgress,
}) async {
final connectivityResult = await connectivity.checkConnectivity();
if (connectivityResult != ConnectivityResult.none) {
try {
// await baseStorage.openBox(StorageConstants.base);
final Directory savedDir = Directory(downloadPath);
final bool hasExisted = await savedDir.exists();
if (!hasExisted) {
await savedDir.create(recursive: true);
}
final Map<String, dynamic> dioHeader = _dio.options.headers;
final Map<String, dynamic> headers = {
'Accept': ContentType.binary.mimeType,
};
if (header != null) {
headers.addAll(header);
}
dioHeader.addAll(headers);
_dio.options.headers = dioHeader;
final Response response = await _dio.download(
url,
'$downloadPath/$fileName',
queryParameters: queryParameter,
onReceiveProgress: onReceiveProgress,
);
return right(response.data);
} on DioError catch (e) {
debugPrint('================ERROR==================');
debugPrint(e.type.toString());
switch (e.type) {
case DioErrorType.connectionTimeout:
return left(const NetworkError.timeout());
case DioErrorType.unknown:
return left(NetworkError.other(e: e));
default:
return left(NetworkError.serverError(response: e.response));
}
}
} else {
return left(const NetworkError.noInternet());
}
}