如何使用 HTTP 请求(Flutter/Dart)检查 Internet 连接?
Posted
技术标签:
【中文标题】如何使用 HTTP 请求(Flutter/Dart)检查 Internet 连接?【英文标题】:How do I check Internet Connectivity using HTTP requests(Flutter/Dart)? 【发布时间】:2020-07-17 02:01:27 【问题描述】:这可能是一个菜鸟问题,但是如果用户没有互联网连接或获取数据需要很长时间,我如何让我的响应引发异常?
Future<TransactionModel> getDetailedTransaction(String crypto) async
//TODO Make it return an error if there is no internet or takes too long!
http.Response response = await http.get(crypto);
return parsedJson(response);
【问题讨论】:
查看这个问题的答案:***.com/questions/49648022/… 【参考方案1】:这是我检查互联网连接以检查整个应用程序的互联网连接的方法
我创建了一个名为“connectivity”的通用类,并在应用程序的任何地方使用它来检查连接性。我使用 flutter 的连接包。
我的连接类
Future<bool> check() async
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile)
return true;
else if (connectivityResult == ConnectivityResult.wifi)
return true;
return false;
然后我像这样使用这个类:
@override
void initState()
super.initState();
checkInternetConnection().then((internet)
if (internet != null && internet)
// Internet Present Case
// do your task;
else
// No-Internet Case
showAlertDialog(context);
);
【讨论】:
【参考方案2】:您不需要使用http自己检查连接,只需使用connectivity库
【讨论】:
感谢您的意见!我正在为这个项目使用 BLoC 设计模式,所以这个解决方案最终与我的项目不兼容。 原发帖人询问如何检查互联网连接,但pub.dev/packages/connectivity中的连接库包页面明确指出“在android上,这并不能保证连接到互联网。例如,应用程序可能有 wifi 访问,但它可能是 *** 或酒店 WiFi 无法访问。”。因此,这个答案并不能解决发帖者的问题。【参考方案3】:你可以使用这个插件https://pub.dev/packages/data_connection_checker
因此,您可以事先检查您是否有连接,如果没有,则向用户发出没有互联网连接的警报。如果你有互联网连接,那么就继续你的获取部分。
我将在下面链接一些资源已经完美解释:
https://www.youtube.com/watch?v=u_Xyqo6lhFE
这是在进行 http 调用之前要做的所有事情,但是如果在进行 http 调用时互联网中断了,那么您可以使用 @uros 提到的 try catch 块。
让我知道它是否有效。
【讨论】:
如果您想检查整个应用程序中的数据连接,该解决方案很好,但我只想在该一种获取方法中检查连接。感谢您的帮助!【参考方案4】:你应该用 try catch 块包围它,像这样:
import 'package:http/http.dart' as http;
int timeout = 5;
try
http.Response response = await http.get('someUrl').
timeout(Duration(seconds: timeout));
if (response.statusCode == 200)
// do something
else
// handle it
on TimeoutException catch (e)
print('Timeout Error: $e');
on SocketException catch (e)
print('Socket Error: $e');
on Error catch (e)
print('General Error: $e');
如果手机知道没有连接(如 WiFi 和数据连接都关闭),则会立即引发套接字异常。
在给定的超时后会引发超时异常,例如服务器响应时间过长或用户连接很差等。
如果响应码不是 = 200,也不要忘记处理这种情况。
【讨论】:
抱歉让您久等了。非常感谢它完美地工作! @Uros 但手机连接到 wifi 仍然出现套接字异常错误。 没有互联网连接只是SocketException
抛出的原因之一。我的意思是还有一些其他问题是我导致SocketException
被抛出的。有没有什么方法可以准确判断是因为没有网络连接?以上是关于如何使用 HTTP 请求(Flutter/Dart)检查 Internet 连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 if 语句在“flutter / dart”中发送 https 发布请求