flutter如何检查网络是否畅通

在Flutter开发中,如何实时检测设备的网络连接状态?我想在应用启动时和运行过程中都能监控网络是否畅通,当网络断开或恢复时能及时通知用户。目前看到有connectivity_plus插件,但不确定它是否能准确检测实际网络可用性(比如连接WiFi但无互联网的情况)。请问最佳实践是什么?是否需要结合Dio或其他HTTP请求来验证?希望能提供完整的代码示例和原理说明。

2 回复

使用 connectivity_plus 包检查网络状态。首先监听连接变化,然后通过 http.get() 请求测试网络是否真正可用。

更多关于flutter如何检查网络是否畅通的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中检查网络是否畅通,可以使用 connectivity_plus 包来检测网络连接状态,并结合 httpdio 包发送请求来验证实际连通性。以下是具体步骤:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  connectivity_plus: ^5.0.0
  http: ^1.1.0  # 可选,用于实际请求测试

2. 检查网络连接状态

使用 connectivity_plus 检测网络类型(如 WiFi、移动数据):

import 'package:connectivity_plus/connectivity_plus.dart';

Future<bool> checkNetworkStatus() async {
  var connectivityResult = await Connectivity().checkConnectivity();
  return connectivityResult != ConnectivityResult.none;
}

3. 验证实际网络畅通(推荐)

仅检测连接状态可能不够(例如连接了WiFi但无互联网)。可发送一个轻量级请求(如访问可靠网站):

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

Future<bool> checkRealNetwork() async {
  try {
    final response = await http.get(Uri.parse('https://www.google.com')).timeout(Duration(seconds: 5));
    return response.statusCode == 200;
  } catch (e) {
    return false;
  }
}

4. 综合使用

结合两者确保准确性:

Future<bool> isNetworkAvailable() async {
  if (await checkNetworkStatus()) {
    return await checkRealNetwork();
  }
  return false;
}

注意事项:

  • 权限:Android 需在 AndroidManifest.xml 添加网络权限:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • iOS:无需额外配置。
  • 实际测试时建议选择稳定且可访问的地址(如 Google 或自定义服务器)。

这种方法既能检测设备是否联网,又能验证互联网实际可访问性。

回到顶部