onResponse method
Called when the response is about to be resolved.
Implementation
@override
void onResponse(
Response<dynamic> response,
ResponseInterceptorHandler handler,
) {
super.onResponse(response, handler);
if (!settings.enabled) {
return;
}
final accepted = settings.responseFilter?.call(response) ?? true;
if (!accepted) {
return;
}
try {
final message = '${response.requestOptions.uri}';
//
// <--- Request data --->
//
Map<String, dynamic>? requestBody;
if (response.requestOptions.data is FormData) {
final formData = response.requestOptions.data as FormData;
final fields = formData.fields;
final files = formData.files
.map(
(e) => {
'key': e.key,
'filename': e.value.filename,
'contentType': e.value.contentType,
'length': e.value.length,
'headers': e.value.headers,
},
)
.toList();
requestBody = {
'fields': fields,
'files': files,
};
} else {
requestBody = response.requestOptions.data as Map<String, dynamic>?;
}
//
// <--- Response data --->
//
Object? responseBody;
if (response.data is FormData) {
final formData = response.data as FormData;
final fields = formData.fields;
final files = formData.files
.map(
(e) => {
'key': e.key,
'filename': e.value.filename,
'contentType': e.value.contentType,
'length': e.value.length,
'headers': e.value.headers,
},
)
.toList();
responseBody = {
'fields': fields,
'files': files,
};
} else {
responseBody = response.data;
}
final httpLog = DioResponseLog(
message,
settings: settings,
method: response.requestOptions.method,
url: response.requestOptions.uri.toString(),
path: response.requestOptions.uri.path,
statusCode: response.statusCode,
statusMessage: response.statusMessage,
requestHeaders: response.requestOptions.headers,
headers: response.headers.map
.map((key, value) => MapEntry(key, value.toString())),
requestBody: requestBody,
responseBody: responseBody,
);
_iSpectify.logCustom(httpLog);
} catch (_) {
//pass
}
}