In flutter, data response from REST API sometime get null With GetX

171 Views Asked by At

I use getConnect API from getX, and check validate the response got from the API. But at some unexpected time (not happen always, mostly occur with android version 10 device), only got null from the API response. Actually I suppose requesting API may get FAIL or SUCCESS for every request. Now only got null response. Why this happen, is it issue of the package or android device version error or, how can I fix it?

class ApiServices with DataStorageMixin {

  final Logger log = Logger();
  static GetConnect? _instance;

  ApiServices._() {
    if (_instance == null) {
      _instance = GetConnect(timeout: const Duration(seconds: 10));
      _instance!.httpClient.addRequestModifier<dynamic>((request) {
        log.i("Request method: ${request.method}\nUrl: ${request.url}");
        log.i("Request header: ${request.headers}");
        return request;
      });
      _instance!.httpClient.addResponseModifier((request, response) {
        log.i("Response is : ${response.status.code}\nBody: ${response.body}");
        return response;
      });
    }
  }

  factory ApiServices.instance() => ApiServices._();

 

  void validateResponse({
    required Response? response,
    required Callback<Map<String, dynamic>> onSuccess,
    required Callback<Map<String, dynamic>> onRequestError,
    required Callback<Map<String, dynamic>> onServerError,
  }) {
    print('RB --- ${response!.body}');
    if (response!.body != null) {
      Map<String, dynamic> responseBody = response.body;
      if (response.statusCode == 200 || response.statusCode == 201) {
        bool isSuccessResponse = responseBody['err'] == CODE_SUCCESS ||
            responseBody['err'] == CODE_NEW_USER ||
            responseBody['err'] == CODE_REGISTERED_USER ||
            responseBody['err'] == CODE_CREATE;
        if (isSuccessResponse) {
          onSuccess(responseBody);
        } else {
          onRequestError(responseBody);
        }
      } else {
        onServerError(responseBody);
      }
    }
  }

  

  Future<void> apiPostCall({
    String? bearerToken,
    required String endPoint,
    bool isFullEndPoint = false,
    Map<String, dynamic>? data,
    required Callback<Map<String, dynamic>> onSuccess,
    required Callback<Map<String, dynamic>> onRequestError,
    required Callback<Map<String, dynamic>> onServerError,
  }) async {
    // try {
    Response? response = await _instance!.post(
      isFullEndPoint ? endPoint : '$BASE_URL$endPoint',
      data,
      headers: await getHeader(
        url: endPoint,
        bearerToken: bearerToken,
      ),
    );
    validateResponse(
      response: response,
      onSuccess: onSuccess,
      onRequestError: onRequestError,
      onServerError: onServerError,
    );
    // } catch (e) {
    //   onServerError({'error': e});
    // }
  }
}

In this method validateResponse(), I log response.body and it got null but for unexpected time (Not happen every request).

  void validateResponse({
    required Response? response,
    required Callback<Map<String, dynamic>> onSuccess,
    required Callback<Map<String, dynamic>> onRequestError,
    required Callback<Map<String, dynamic>> onServerError,
  }) {
    print('RB --- ${response!.body}');
    if (response!.body != null) {
      Map<String, dynamic> responseBody = response.body;
      if (response.statusCode == 200 || response.statusCode == 201) {
        bool isSuccessResponse = responseBody['err'] == CODE_SUCCESS ||
            responseBody['err'] == CODE_NEW_USER ||
            responseBody['err'] == CODE_REGISTERED_USER ||
            responseBody['err'] == CODE_CREATE;
        if (isSuccessResponse) {
          onSuccess(responseBody);
        } else {
          onRequestError(responseBody);
        }
      } else {
        onServerError(responseBody);
      }
    }
  }

Here is the screen shoot of response. enter image description here

0

There are 0 best solutions below