flutter如何检测网络状态

在Flutter应用中,如何实时检测设备的网络连接状态?比如用户从WiFi切换到移动数据或完全断网时,如何准确获取当前网络类型(WiFi/蜂窝/无网络)并触发回调?最好能提供性能优化的方案,避免频繁检测导致耗电增加。官方推荐的connectivity_plus插件在实际使用中是否有坑需要注意?

2 回复

使用connectivity_plus包检测网络状态。示例代码:

var connectivityResult = await Connectivity().checkConnectivity();
if (connectivityResult == ConnectivityResult.mobile) {
  // 移动网络
} else if (connectivityResult == ConnectivityResult.wifi) {
  // WiFi
} else {
  // 无网络
}

需添加依赖:connectivity_plus: ^5.0.2

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


在Flutter中检测网络状态,推荐使用 connectivity_plus 包。以下是具体实现步骤:

  1. 添加依赖pubspec.yaml 中添加:

    dependencies:
      connectivity_plus: ^5.0.1
    
  2. 基本使用

    import 'package:connectivity_plus/connectivity_plus.dart';
    
    // 检查当前网络状态
    Future<void> checkConnectivity() async {
      var connectivityResult = await Connectivity().checkConnectivity();
      if (connectivityResult == ConnectivityResult.mobile) {
        print('移动网络');
      } else if (connectivityResult == ConnectivityResult.wifi) {
        print('WiFi网络');
      } else if (connectivityResult == ConnectivityResult.none) {
        print('无网络连接');
      }
    }
    
  3. 监听网络状态变化

    StreamSubscription<ConnectivityResult>? subscription;
    
    [@override](/user/override)
    void initState() {
      super.initState();
      subscription = Connectivity().onConnectivityChanged.listen((result) {
        // 处理网络状态变化
        print('网络状态变为: $result');
      });
    }
    
    [@override](/user/override)
    void dispose() {
      subscription?.cancel();
      super.dispose();
    }
    

注意事项:

  • 该包仅检测网络连接类型,不保证一定能访问互联网
  • 如需检测真实网络可达性,建议配合 http 包尝试访问特定地址
  • Android需添加网络权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

这是最常用的网络状态检测方案,简单可靠且支持跨平台。

回到顶部