createDio method

Dio createDio()

Implementation

Dio createDio() {
  var dio = Dio();

  dio.options.connectTimeout =
      const Duration(milliseconds: API_GET_AWAY_TIME_OUT);

  dio.interceptors.add(InterceptorsWrapper(
    onRequest: (options, handler) async {
      options.headers = {
        'X-Sfy-Api-Key': await getApiKey(),
        'Origin': await getSubDomain(),
        'Accept': 'application/json',
        'Content-Type': 'text/plain',
      };

      return handler.next(options);
    },
    onResponse: (response, handler) async {
      final loggerEnabled = await getStorageItem(key: 'logger');
      // show type of loggerEnabled
      if (loggerEnabled == 'true') {
        Logger.log(
          level: LogLevels.INFO,
          message: 'Response Interceptor: ',
          payload: response,
        );
      }
      final responseData = response.data;
      var responseStatusCode = '';
      if (responseData is Map && responseData.containsKey('statusCode')) {
        responseStatusCode = responseData['statusCode'];
      }

      if (responseStatusCode != 'SUCCESS' &&
          (responseData is Map && responseData.containsKey('statusText'))) {
        response.data.message = getApiErrorMessage(responseStatusCode);
        response.statusMessage = 'ERROR';
        response.statusCode = 400;
      }
      response.statusMessage = 'SUCCESS';

      return handler.next(response);
    },
    onError: (DioException error, handler) async {
      if ((error.type == DioExceptionType.connectionTimeout ||
              error.type == DioExceptionType.sendTimeout ||
              error.type == DioExceptionType.receiveTimeout) &&
          error.message!.contains('timeout')) {
        final loggerEnabled = await getStorageItem(key: 'logger');
        if (loggerEnabled == 'true') {
          Logger.log(
            level: LogLevels.ERROR,
            message: 'Response Interceptor Error: ',
            payload: 'Request timed out',
          );
        }
      } else {
        Logger.log(
          level: LogLevels.ERROR,
          message: 'Response Interceptor Error: ',
          payload: error.message,
        );
      }
      return handler.reject(error);
    },
  ));

  return dio;
}