flutter如何检测是否有网络连接

在Flutter开发中,如何检测设备当前是否有网络连接?有没有可靠的插件或方法可以实现实时监听网络状态变化?我试过一些方案但偶尔会出现延迟或误判,想找官方推荐的最佳实践。

2 回复

使用connectivity_plus包。监听网络状态变化,或手动检查ConnectivityResult。示例代码:

var connectivityResult = await Connectivity().checkConnectivity();
if (connectivityResult == ConnectivityResult.none) {
  // 无网络
}

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


在 Flutter 中检测网络连接状态,推荐使用 connectivity_plus 包。以下是实现方法:

  1. 添加依赖pubspec.yaml 中添加:
dependencies:
  connectivity_plus: ^5.0.0
  1. 基本使用代码
import 'package:connectivity_plus/connectivity_plus.dart';

// 检查当前网络状态
Future<void> checkConnectivity() async {
  final connectivityResult = await Connectivity().checkConnectivity();
  
  if (connectivityResult == ConnectivityResult.mobile) {
    print('移动网络已连接');
  } else if (connectivityResult == ConnectivityResult.wifi) {
    print('WiFi已连接');
  } else if (connectivityResult == ConnectivityResult.ethernet) {
    print('有线网络已连接');
  } else if (connectivityResult == ConnectivityResult.vpn) {
    print('VPN已连接');
  } else if (connectivityResult == ConnectivityResult.bluetooth) {
    print('蓝牙网络已连接');
  } else if (connectivityResult == ConnectivityResult.other) {
    print('其他网络已连接');
  } else {
    print('没有网络连接');
  }
}
  1. 监听网络状态变化
// 创建监听
StreamSubscription<ConnectivityResult> subscription = Connectivity().onConnectivityChanged.listen((result) {
  // 当网络状态变化时执行
  if (result == ConnectivityResult.none) {
    print('网络连接断开');
  } else {
    print('网络已恢复: $result');
  }
});

// 记得在 dispose 时取消监听
@override
void dispose() {
  subscription.cancel();
  super.dispose();
}

重要说明

  • connectivity_plus 只能检测设备是否有网络连接能力,不能保证一定能访问互联网
  • 如需验证真实网络连通性,建议配合 http 请求测试
  • Android 需要网络权限(自动处理)
  • iOS 需要在 Info.plist 中添加网络权限描述

这是最常用的网络连接检测方案,简单可靠且维护良好。

回到顶部