request method

  1. @override
Future<Either<NetworkError, dynamic>> request(
  1. {required String path,
  2. int retry = 0,
  3. String? parameter,
  4. Map<String, dynamic>? queryParameter,
  5. dynamic content,
  6. String? contentType,
  7. Map<String, dynamic>? header,
  8. dynamic onSendProgress(
    1. int,
    2. int
    )?,
  9. dynamic onReceiveProgress(
    1. int,
    2. int
    )?,
  10. RetryEvaluator? evaluator,
  11. NetworkOptions? networkOptions,
  12. Duration? networkReceiveTimeout,
  13. Duration? networkSendTimeout}
)
override

Implementation

@override
Future<Either<NetworkError, dynamic>> request({
  required String path,
  int retry = 0,
  String? parameter,
  Map<String, dynamic>? queryParameter,
  dynamic content,
  String? contentType,
  Map<String, dynamic>? header,
  Function(int, int)? onSendProgress,
  Function(int, int)? onReceiveProgress,
  RetryEvaluator? evaluator,
  NetworkOptions? networkOptions,
  Duration? networkReceiveTimeout,
  Duration? networkSendTimeout,
}) async {
  final connectivityResult = await connectivity.checkConnectivity();
  if (connectivityResult != ConnectivityResult.none) {
    try {
      // await baseStorage.openBox(StorageConstants.base);
      final Map<String, dynamic> dioHeader = _dio.options.headers;
      final Map<String, dynamic> headers = {
        'content-type': ContentType.json.mimeType,
        'Accept': ContentType.json.mimeType,
      };
      if (header != null) {
        headers.addAll(header);
      }
      dioHeader.addAll(headers);
      _dio.options.headers = dioHeader;
      Options? options;
      if (networkOptions != null) {
        options = Options(
          contentType: networkOptions.contentType ?? this.contentType,
          extra: networkOptions.extra ?? extra,
          followRedirects: networkOptions.followRedirects ?? followRedirects,
          headers: networkOptions.headers ?? this.headers,
          listFormat: networkOptions.listFormat ?? listFormat,
          maxRedirects: networkOptions.maxRedirects ?? maxRedirects,
          method: networkOptions.method ?? method,
          receiveDataWhenStatusError:
              networkOptions.receiveDataWhenStatusError ??
                  receiveDataWhenStatusError,
          receiveTimeout: networkReceiveTimeout ?? receiveTimeout,
          requestEncoder: networkOptions.requestEncoder ?? requestEncoder,
          responseDecoder: networkOptions.responseDecoder ?? responseDecoder,
          responseType: networkOptions.responseType ?? responseType,
          sendTimeout: networkSendTimeout ?? sendTimeout,
          validateStatus: networkOptions.validateStatus ?? validateStatus,
        );
      }
      final Response response = await _requestDynamic(
        path: path,
        retry: retry,
        content: content,
        evaluator: evaluator,
        onReceiveProgress: onReceiveProgress,
        onSendProgress: onSendProgress,
        options: options,
        queryParameter: queryParameter,
      );
      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());
  }
}