如何使用 HTTP 请求 (Flutter/Dart) 检查 Internet 连接?
How do I check Internet Connectivity using HTTP requests(Flutter/Dart)?
这可能是一个菜鸟问题,但是如果用户没有互联网连接或者获取数据的时间太长,我该如何让我的响应抛出异常?
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);
}
你应该用 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');
}
如果 phone 意识到没有连接(例如 WiFi 和数据连接都已关闭),将立即引发套接字异常。
超时异常将在给定超时后引发,例如服务器响应时间过长或用户连接非常差等
如果响应代码不是 = 200,也不要忘记处理这种情况。
你可以使用这个插件https://pub.dev/packages/data_connection_checker
因此您可以事先检查是否有连接,如果没有则向用户发出没有互联网连接的警报。如果你有互联网连接,那么就继续你的获取部分。
我将 link 下面的一些资源已得到完美解释:
https://www.youtube.com/watch?v=u_Xyqo6lhFE
这是在进行 http 调用之前要做的所有事情,但是如果在进行 http 调用时互联网断开怎么办,那么您可以使用 @uros 提到的 try catch 块。
如果有效请告诉我。
您不需要自己使用 http 检查连接,只需使用 connectivity 库
这是我检查互联网连接的方法,以检查整个应用程序的互联网连接
我创建了一个名为“connectivity”的通用 class 并在应用中的任何地方使用它来检查 connectivity.i 通过 flutter 使用连接包。
我的连接性class
Future<bool> check() async {
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
return true;
} else if (connectivityResult == ConnectivityResult.wifi) {
return true;
}
return false;
}
然后我这样使用 class:
@override
void initState() {
super.initState();
checkInternetConnection().then((internet) {
if (internet != null && internet) {
// Internet Present Case
// do your task;
} else {
// No-Internet Case
showAlertDialog(context);
}
});
}
这可能是一个菜鸟问题,但是如果用户没有互联网连接或者获取数据的时间太长,我该如何让我的响应抛出异常?
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);
}
你应该用 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');
}
如果 phone 意识到没有连接(例如 WiFi 和数据连接都已关闭),将立即引发套接字异常。
超时异常将在给定超时后引发,例如服务器响应时间过长或用户连接非常差等
如果响应代码不是 = 200,也不要忘记处理这种情况。
你可以使用这个插件https://pub.dev/packages/data_connection_checker
因此您可以事先检查是否有连接,如果没有则向用户发出没有互联网连接的警报。如果你有互联网连接,那么就继续你的获取部分。
我将 link 下面的一些资源已得到完美解释:
https://www.youtube.com/watch?v=u_Xyqo6lhFE
这是在进行 http 调用之前要做的所有事情,但是如果在进行 http 调用时互联网断开怎么办,那么您可以使用 @uros 提到的 try catch 块。
如果有效请告诉我。
您不需要自己使用 http 检查连接,只需使用 connectivity 库
这是我检查互联网连接的方法,以检查整个应用程序的互联网连接
我创建了一个名为“connectivity”的通用 class 并在应用中的任何地方使用它来检查 connectivity.i 通过 flutter 使用连接包。
我的连接性class
Future<bool> check() async {
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
return true;
} else if (connectivityResult == ConnectivityResult.wifi) {
return true;
}
return false;
}
然后我这样使用 class:
@override
void initState() {
super.initState();
checkInternetConnection().then((internet) {
if (internet != null && internet) {
// Internet Present Case
// do your task;
} else {
// No-Internet Case
showAlertDialog(context);
}
});
}