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

Flutter调用network_info_plus的getLocationServiceAuthorization报MissingPluginException如何解决

异常触发原因
  • 最常见的原因是添加network_info_plus依赖后仅执行了热重载/热更新,没有重新完整编译应用,插件的原生端代码没有被打包进应用包,导致方法通道找不到对应的实现。
  • network_info_plus版本和当前项目的Flutter版本不兼容,高版本的network_info_plus移除了对低版本Flutter的适配,部分方法的原生实现无法被调用。
  • 应用运行在network_info_plus不支持的平台上:getLocationServiceAuthorization方法仅支持Android、iOS平台,在桌面、Web等平台运行时会抛出该异常。
修复方案
  • 先执行通用修复流程:停止当前运行的应用,依次执行flutter clean、flutter pub get命令,之后重新完整编译运行项目,不要使用热重载/热更新,90%的同类异常可以通过该方案解决。
  • 检查版本适配:如果你的项目Flutter版本低于2.10,将network_info_plus依赖降级到3.x版本;如果是更高版本的Flutter,升级到network_info_plus的最新稳定版即可。
  • 增加平台判断逻辑,仅在Android、iOS平台调用SSID获取相关方法,其他平台可以直接跳过SSID校验逻辑。
额外代码逻辑优化建议

你调整后的代码存在明显的异步逻辑问题:NetworkInfo类的构造函数调用了异步方法_initNetworkInfo,但构造函数无法等待异步任务执行完成,你直接访问NetworkInfo().wifiName时,异步任务还没执行完,拿到的永远是null,永远无法匹配到目标SSID。
建议调整为异步判断逻辑,参考代码如下:

// 将状态判断方法改为异步
Future<ConnectivityStatus> _getStatusFromResult(ConnectivityResult result) async {
  switch (result) {
    case ConnectivityResult.mobile:
    case ConnectivityResult.none:
      return ConnectivityStatus.NotConnected;
    case ConnectivityResult.wifi:
      final wifiName = await _initNetworkInfo();
      return wifiName == 'WIFI_SSID_NAME' ? ConnectivityStatus.Connected : ConnectivityStatus.NotConnected;
    default:
      return ConnectivityStatus.NotConnected;
  }
}

同时要正常获取SSID还需要补充平台权限配置:

  • Android端:在AndroidManifest.xml中添加ACCESS_FINE_LOCATION、ACCESS_WIFI_STATE、ACCESS_NETWORK_STATE权限,Android 12及以上还需要添加ACCESS_COARSE_LOCATION、NEARBY_WIFI_DEVICES权限。
  • iOS端:在Info.plist中添加NSLocationWhenInUseUsageDescription权限说明,开启Access WiFi Information能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:03:04