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

Flutter:如何检测应用是否真正联网(含Web端)

Flutter 应用联网检测方案(含Web端适配)

针对Web端InternetAddress.lookup不支持、http.get性能开销大的问题,推荐以下几种轻量方案:

1. 直接利用Web原生navigator.onLine API

这是性能最低的方案,无需任何网络请求,直接读取浏览器的联网状态判断:

import 'dart:js' as js;

bool isWebOnline() {
  return js.context['navigator']['onLine'] as bool;
}
  • 优点:零性能开销,实时性强
  • 局限性:仅判断浏览器是否处于"联网状态"(比如连上无网WiFi也会返回true),无法确保实际能访问互联网

2. 用HEAD请求检测实际联网能力

如果需要确认设备能真正访问互联网,用HEAD请求替代GET,只获取响应头,避免下载整个网页内容:

import 'package:http/http.dart' as http;

Future<bool> hasRealInternetAccess() async {
  try {
    // 替换成你自己的轻量健康检查接口,或响应极小的公开资源接口
    final response = await http.head(Uri.parse('https://your-server.com/health-check'));
    return response.statusCode >= 200 && response.statusCode < 300;
  } catch (_) {
    return false;
  }
}
  • 优点:能准确判断是否可访问目标网络,开销远低于GET请求
  • 注意:优先选择自己控制的接口,避免依赖第三方服务的稳定性

3. 跨平台库connectivity_plus

如果需要一套代码适配全平台(包括Web),可以用connectivity_plus库,Web端底层基于navigator.onLine实现:

import 'package:connectivity_plus/connectivity_plus.dart';

Future<bool> checkCrossPlatformConnectivity() async {
  final connectivityResult = await Connectivity().checkConnectivity();
  return connectivityResult != ConnectivityResult.none;
}
  • 优点:跨平台兼容,无需针对Web单独写逻辑
  • 局限性:同navigator.onLine,仅判断连接状态,不保证实际联网能力,需结合HEAD请求补充验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:40:29