flutter - Flutter使用InternetAddress.lookup检查互联网连接不起作用
问题描述
我有一个类正在使用连接包检查网络连接,然后如果有网络连接,它正在检查互联网是否可用InternetAddress.lookup
问题是连接包正在工作!并且检测到 Wi-Fi 和移动连接但InternetAddress.lookup
总是返回true
!即使没有互联网!
完整课程代码:
import 'dart:io';
import 'dart:async';
import 'package:connectivity/connectivity.dart';
class ConnectionStatusSingleton {
static Future<bool> checkConnection() async {
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
try {
final result = await InternetAddress.lookup('example.com');
var res = result.isNotEmpty && result[0].rawAddress.isNotEmpty;
return res;
} on SocketException catch (_) {
return false;
}
} else if (connectivityResult == ConnectivityResult.wifi) {
try {
final result = await InternetAddress.lookup('example.com');
var res = result.isNotEmpty && result[0].rawAddress.isNotEmpty;
return res;
} on SocketException catch (_) {
return false;
}
} else {
return false;
}
}
}
我使用以下方法调用它:
bool connectionState = await ConnectionStatusSingleton.checkConnection();
解决方案
这是我使用的代码
Future<bool> isInternetConnected() async {
try {
final result = await InternetAddress.lookup('example.com');
var res = result.isNotEmpty && result[0].rawAddress.isNotEmpty;
setState(() {
isInternet = res;
});
return res;
} on SocketException catch (_) {
setState(() {
isInternet = false;
});
return false;
}
}
您似乎没有根据 wifi 和蜂窝数据执行任何特定操作,因此您可以使用它。您的问题似乎是您处理异常的方式。
对代码的一般理解是“尝试连接到互联网上的东西,如果设备有互联网,它会连接,否则它会抛出异常”
在上面的代码中我不推荐使用setState()
. 我用它来满足确切的需求。您可以相应地对其进行调整。