我有一个类,它使用连接包检查网络连接,然后如果有网络连接,它使用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()
。我用它来满足一个确切的需求。你可以相应地定制。