该错误表明
_updateConnectionStatus
方法被视为返回 List<ConnectivityResult>
,这是不正确的。 _updateConnectionStatus
方法返回 ConnectivityResul
指示当前连接状态。
对
_updateConnectionStatus
的方法签名似乎存在误解。
late StreamSubscription subscription;
StreamSubscription<ConnectivityResult>? connectivitySubscription;
StreamSubscription? internetSubscription;
bool hasInternet = false;
@override
void initState(){
super.initState();
subscription = Connectivity().onConnectivityChanged.listen(_updateConnectionStatus);
internetSubscription = InternetConnectionChecker().onStatusChange.listen((status) {
final hasInternet = status == InternetConnectionStatus.connected;
setState(() => this.hasInternet = hasInternet);
});
}
@override
void dispose() {
// Cancel the connectivity subscription when the controller is closed
connectivitySubscription?.cancel();
super.dispose();
}
void _updateConnectionStatus (ConnectivityResult result) {
final hasInternet = result != ConnectivityResult.none;
final message = hasInternet
? result == ConnectivityResult.mobile
? 'You are connected to mopile network'
: 'You are connected to mopile network'
: 'You have no internet';
// Only check for the none case, which indicates no connectivity
if (!hasInternet) {
Get.rawSnackbar(
messageText: Text('PLEASE CONNECT TO THE INTERNET $message',
style: const TextStyle(color: Colors.white, fontSize: 14)),
isDismissible: false,
duration: const Duration(days: 1),
backgroundColor: Colors.red[400]!,
icon: const Icon(
Icons.wifi_off,
color: Colors.white,
size: 35,
),
snackStyle: SnackStyle.GROUNDED);
} else {
if (Get.isSnackbarOpen) {
Get.closeCurrentSnackbar();
}
}
}
错误信息是正确的。您将
_updateConnectionStatus
方法(以 ConnectivityResult
作为参数)传递给 listen
的
onConnectivityChanged
回调,这是 List<ConnectivityResult>
的流。
在 connectivity_plus 包的早期版本中,
onConnectivityChanged
流发出一个 ConnectivityResult
,您的方法可以在其中传递给它。然而,更新 6.0.x 引入了一些重大更改,其中之一是 onConnectivityChanged
流现在改为发出 List<ConnectivityResult>
。
您的选择是将connectivity_plus包降级到5.x.x,或者调整您的
_updateConnectionStatus
方法以接受List<ConnectivityResult>
作为参数。