我用的是dio 4.0.2。问题是,当没有互联网连接时(当互联网和wifi没有打开),SocketException: Failed host lookup
就不会被捕获。我通过拦截器的onError方法进行了检查,我确信它是从拦截器发送错误的。但是post请求不是为此抛出错误。
下面是我的错误代码拦截器:
@override
void onError(DioError err, ErrorInterceptorHandler handler) {
super.onError(err, handler);
}
我怎么能抓到这个?
发布于 2021-12-22 21:40:19
我就是这样用的:
bool _isServerDown(DioError error) {
return (error.error is SocketException) || (error.type == DioErrorType.connectTimeout);
}
@override
Future<void> onError(DioError error, ErrorInterceptorHandler handler) async {
if (_isServerDown(error)) {
Response? response;
try {
response = await tryAnotherUrl(error.requestOptions);
} catch (error) {
if (error is DioError) {
response = error.response;
handler.next(error);
return;
}
}
if (response != null) {
handler.resolve(response);
} else {
handler.next(error);
}
return;
}
发布于 2021-12-23 08:04:56
不知道为什么,但这对我有用:
// add error interceptor to catch all errors
dioBuilder.dio.interceptors.add(
InterceptorsWrapper(
onError: (error, handler) {
// Do stuff here
handler.reject(error); // Added this line to let error propagate outside the interceptor
},
),
);
https://stackoverflow.com/questions/70452330
复制相似问题