initializeDio method

Dio initializeDio()

Always use this method to initialize the dio client

Implementation

Dio initializeDio() {
  dio = Dio(
    BaseOptions(
        baseUrl: baseUrl,
        receiveTimeout: 15000, // 15 seconds
        connectTimeout: 15000,
        sendTimeout: 15000,
        validateStatus: (status) {
          return true;
        }),
  );

  dio?.interceptors.add(
    InterceptorsWrapper(
      onRequest:
          (RequestOptions options, RequestInterceptorHandler handler) async {
        await setAccessToken();
        options.headers = header();
        logger.v("REQUEST[${options.method}] => PATH: ${options.uri}"
            "=> REQUEST VALUES: ${options.data} => HEADERS: ${options.headers}");

        return handler.next(options);
      },
      onResponse: (response, handler) {
        logger
            .i("RESPONSE[${response.statusCode}] => DATA: ${response.data}");
        return handler.next(response);
      },
      onError: (err, handler) {
        logger.e(
            "Error[${err.response?.statusCode}] => DATA: ${err.response?.data}");
        switch (err.type) {
          case DioErrorType.connectTimeout:
          case DioErrorType.sendTimeout:
          case DioErrorType.receiveTimeout:
            throw DeadlineExceededException(err.requestOptions);
          case DioErrorType.response:
            switch (err.response?.statusCode) {
              case 400:
                throw BadRequestException(err.requestOptions);
              case 401:
                throw UnauthorizedException(err.requestOptions);
              case 404:
                throw NotFoundException(err.requestOptions);
              case 409:
                throw ConflictException(err.requestOptions);
              case 500:
                throw InternalServerErrorException(err.requestOptions);
            }
            break;
          case DioErrorType.cancel:
            break;
          case DioErrorType.other:
            throw NoInternetConnectionException(err.requestOptions);

          default:
        }

        // return handler.next(err);
      },
    ),
  );
  return dio!;
}