You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter错误:‘void Function(ConnectivityResult)’无法赋值给目标类型如何解决?

解决Flutter中Connectivity回调参数类型不匹配问题

错误原因

你遇到的错误是因为connectivity(或connectivity_plus)包版本更新后,onConnectivityChanged流的输出类型从单个ConnectivityResult改为List<ConnectivityResult>,但你的_updateConnectionStatus方法仍接收单个ConnectivityResult参数,导致类型不兼容。另外代码存在变量不一致问题:initState里赋值的是subscription,但dispose里取消的是connectivitySubscription,会导致订阅无法正确取消。

修复方案

  1. 修改_updateConnectionStatus方法的参数为List<ConnectivityResult>,从列表中获取当前连接状态(普通场景取第一个元素即可)
  2. 修正订阅变量的赋值逻辑,确保dispose时能正确取消订阅
  3. 统一变量类型,避免隐式类型转换问题

修改后的完整代码

late StreamSubscription<List<ConnectivityResult>> 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() {
  subscription.cancel();
  internetSubscription?.cancel();
  super.dispose();
}

void _updateConnectionStatus (List<ConnectivityResult> results) {
  final result = results.first;
  final hasInternet = result != ConnectivityResult.none;
  final message = hasInternet
      ? result == ConnectivityResult.mobile
          ? '你已连接到移动网络'
          : '你已连接到无线网络'
      : '当前无网络连接';

  if (!hasInternet) {
    Get.rawSnackbar(
        messageText: Text('请连接网络:$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();
    }
  }
}

额外说明

  • 若使用connectivity_plus包,该类型变更从2.0.0版本左右开始生效,流输出改为多连接状态列表
  • 如需处理多连接场景,可遍历results列表判断所有连接状态,普通业务场景取第一个元素即可

内容的提问来源于stack exchange,提问作者jo4s3ph shaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:44:58