flutter如何检查网络是否畅通
在Flutter开发中,如何实时检测设备的网络连接状态?我想在应用启动时和运行过程中都能监控网络是否畅通,当网络断开或恢复时能及时通知用户。目前看到有connectivity_plus插件,但不确定它是否能准确检测实际网络可用性(比如连接WiFi但无互联网的情况)。请问最佳实践是什么?是否需要结合Dio或其他HTTP请求来验证?希望能提供完整的代码示例和原理说明。
2 回复
使用 connectivity_plus 包检查网络状态。首先监听连接变化,然后通过 http.get() 请求测试网络是否真正可用。
更多关于flutter如何检查网络是否畅通的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中检查网络是否畅通,可以使用 connectivity_plus 包来检测网络连接状态,并结合 http 或 dio 包发送请求来验证实际连通性。以下是具体步骤:
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 或自定义服务器)。
这种方法既能检测设备是否联网,又能验证互联网实际可访问性。

