download method

  1. @override
Future<Either<NetworkError, dynamic>> download({
  1. required String url,
  2. required String downloadPath,
  3. required String fileName,
  4. Map<String, dynamic>? queryParameter,
  5. Map<String, dynamic>? header,
  6. dynamic onReceiveProgress(
    1. int,
    2. int
    )?,
})
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());
  }
}