Flutter使用InternetAddress.lookup检查互联网连接不起作用



我有一个类,它使用连接包检查网络连接,然后如果有网络连接,它使用InternetAddress.lookup检查互联网是否可用

问题是连接包正在工作!并且检测到Wi-Fi和移动连接,但是CCD_ 2总是返回CCD_!即使没有互联网!

全类代码:

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()。我用它来满足一个确切的需求。你可以相应地定制。

最新更新