onResponse method

  1. @override
FutureOr<Response> onResponse(
  1. Response response
)

Implementation

@override
FutureOr<Response> onResponse(Response<dynamic> response) {
  var data = <String, dynamic>{};
  try {
    data = json.decode(response.body as String);
  } catch (error, stackTrace) {
    log.e(
      'Chopper interceptor error',
      error: error,
      stackTrace: stackTrace,
    );
  }

  final requestId = _getRequestHashCode(response.base.request!);
  final statusCode = response.statusCode;
  final isError = statusCode < 200 || statusCode >= 300;

  /// In error case, do not put data in ResponseBean.
  final dynamic responseData;
  //ignore: prefer-conditional-expressions
  if (isError) {
    responseData = null;
  } else {
    responseData = data.isNotEmpty ? data : response.body;
  }

  final responseBean = ResponseBean()
    ..id = requestId
    ..responseTime = DateTime.now()
    ..statusCode = response.statusCode
    ..url = response.base.request?.url.toString()
    ..method = response.base.request?.method
    ..statusMessage = response.base.reasonPhrase
    ..data = responseData
    ..headers = response.headers;
  logManager.onResponse(responseBean);

  /// On error
  if (isError) {
    final errorBean = ErrorBean()
      ..id = requestId
      ..errorData = response.error
      ..statusCode = statusCode
      ..statusMessage = response.base.reasonPhrase
      ..url = response.base.request?.url.toString()
      ..time = DateTime.now();
    logManager.onError(errorBean);
  }

  return response;
}