在dio_mixin.dart的文件中会判断状态码当不是200就直接抛出错误 不解析数据,因此可以先解析数据,查找问题
//此方法是处理数据的方法
Future<Response<dynamic>> _dispatchRequest<T>(RequestOptions reqOpt) async {
final cancelToken = reqOpt.cancelToken;
try {
final stream = await _transformData(reqOpt);
final operation = CancelableOperation.fromFuture(
httpClientAdapter.fetch(
reqOpt,
stream,
cancelToken?.whenCancel,
),
);
final operationWeakReference = WeakReference(operation);
cancelToken?.whenCancel.whenComplete(() {
operationWeakReference.target?.cancel();
});
final responseBody = await operation.value;
final headers = Headers.fromMap(
responseBody.headers,
preserveHeaderCase: reqOpt.preserveHeaderCase,
);
// Make sure headers and [ResponseBody.headers] are the same instance.
responseBody.headers = headers.map;
final ret = Response<dynamic>(
headers: headers,
requestOptions: reqOpt,
redirects: responseBody.redirects ?? [],
isRedirect: responseBody.isRedirect,
statusCode: responseBody.statusCode,
statusMessage: responseBody.statusMessage,
extra: responseBody.extra,
);
//可以在这里打印 数据
// Object? data = await transformer.transformResponse(
// reqOpt,
// responseBody,
// );
// print(data);
//原来的逻辑是判断status 如果不是200就不会去解析数据
final statusOk = reqOpt.validateStatus(responseBody.statusCode);
if (statusOk || reqOpt.receiveDataWhenStatusError == true) {
responseBody.stream = handleResponseStream(reqOpt, responseBody);
Object? data = await transformer.transformResponse(
reqOpt,
responseBody,
);
// Make the response as null before returned as JSON.
if (data is String &&
data.isEmpty &&
T != dynamic &&
T != String &&
reqOpt.responseType == ResponseType.json) {
data = null;
}
ret.data = data;
} else {
responseBody.close();
}
checkCancelled(cancelToken);
if (statusOk) {
return ret;
} else {
throw DioException.badResponse(
statusCode: responseBody.statusCode,
requestOptions: reqOpt,
response: ret,
);
}
} catch (e) {
throw assureDioException(e, reqOpt);
}
}