错误:DioError [DioErrorType.other]:SocketException:主机查找失败:未被捕获
Posted
技术标签:
【中文标题】错误:DioError [DioErrorType.other]:SocketException:主机查找失败:未被捕获【英文标题】:Error: DioError [DioErrorType.other]: SocketException: Failed host lookup: not being caught 【发布时间】:2022-01-23 20:54:51 【问题描述】:我正在使用 dio 4.0.2。问题是当没有互联网连接时(没有打开互联网和 wifi 时),SocketException: Failed host lookup
没有被捕获。我通过拦截器的 onError 方法进行了检查,我确信它正在从拦截器发送错误。但是发布请求不会为此引发错误。
这是我的错误代码拦截器:
@override
void onError(DioError err, ErrorInterceptorHandler handler)
super.onError(err, handler);
我怎样才能捕捉到这个?
【问题讨论】:
【参考方案1】:不知道为什么,但这对我有用:
// 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
,
),
);
【讨论】:
【参考方案2】:我是这样使用的:
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;
【讨论】:
以上是关于错误:DioError [DioErrorType.other]:SocketException:主机查找失败:未被捕获的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:DioError [DioErrorType.DEFAULT]:RangeError(索引):无效值:只有有效值为0:
颤振:异常 DioError [DioErrorType.DEFAULT]:类型 'String' 不是类型 'Map<String, dynamic>' 的子类型
Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段
如何使用 Dio 或 http 在 Flutter 中通过 GET 请求发送参数
Flutter 报错: Error: No address associated with hostname, errno = 7