handleDioError method

Future handleDioError({
  1. required dynamic error,
  2. required StackTrace stackTrace,
  3. required Future retryCall(),
  4. int retries = 1,
})

Implementation

Future<dynamic> handleDioError({
  required dynamic error,
  required StackTrace stackTrace,
  required Future<dynamic> Function() retryCall,
  int retries = 1,
}) async {
  if (error is DioException) {
    final res = error.response;
    final statusCode = error.response?.statusCode;
    Map<int, VoidCallback>? statusCodeHandler = handleStatusCode;

    ErrorLogger.instance.logError(
      file: "error_handler",
      event: "handleDioError",
      error: "$error \n"
          "${error.requestOptions.method} request to ${error.requestOptions.path}\n"
          "Server response: ${res != null && res.data is Map<String, dynamic> ? ErrorResponse.fromJson(res.data).toJson() : null}",
      stackTrace: stackTrace,
    );

    if (statusCode != null) {
      if (statusCodeHandler != null &&
          statusCodeHandler.containsKey(statusCode)) {
        statusCodeHandler[statusCode]?.call();
      }
    }

    switch (error.type) {
      case DioExceptionType.connectionTimeout:
        // TODO: Handle this case.
        break;
      case DioExceptionType.sendTimeout:
        // TODO: Handle this case.
        break;
      case DioExceptionType.receiveTimeout:
        // TODO: Handle this case.
        break;
      case DioExceptionType.badCertificate:
        // TODO: Handle this case.
        break;
      case DioExceptionType.badResponse:
        // TODO: Handle this case.
        break;
      case DioExceptionType.cancel:
        // TODO: Handle this case.
        break;
      case DioExceptionType.connectionError:
        // TODO: Handle this case.
        break;
      case DioExceptionType.unknown:
        if (error.error is SocketException ||
            error.error is HandshakeException) {
          return handleDefaultError(error: error.error, retryCall: retryCall);
        }
        break;
    }
    final resData = error.response?.data;
    if (resData == null) {
      return handleDefaultError(error: error.error, retryCall: retryCall);
    }
    return ErrorResponse.fromJson(
      resData,
    );
  } else {
    return handleDefaultError(error: error, retryCall: retryCall);
  }
}