参数类型“void Function(ConnectivityResult)”无法分配给参数类型“void Function(List<ConnectivityResult>)”?

问题描述 投票:0回答:1

参数类型“void Function(ConnectivityResult)”无法分配给参数类型“void Function(List)?”。我该如何解决它?

该错误表明

_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();
      }
    }
  }
flutter network-programming
1个回答
1
投票

错误信息是正确的。您将

_updateConnectionStatus
方法(以
ConnectivityResult
作为参数)传递给
listen
onConnectivityChanged
回调,这是
List<ConnectivityResult>
的流。

connectivity_plus 包的早期版本中,

onConnectivityChanged
流发出一个
ConnectivityResult
,您的方法可以在其中传递给它。然而,更新 6.0.x 引入了一些重大更改,其中之一是
onConnectivityChanged
流现在改为发出
List<ConnectivityResult>

您的选择是将connectivity_plus包降级到5.x.x,或者调整您的

_updateConnectionStatus
方法以接受
List<ConnectivityResult>
作为参数。

© www.soinside.com 2019 - 2024. All rights reserved.