flutter如何检测网络状态
在Flutter中,如何实时检测设备的网络连接状态?比如判断当前是否有网络连接,或者监听网络状态的变化(从WiFi切换到移动数据等)。有没有推荐的方式或插件来实现这个功能?最好能提供简单的代码示例。
        
          2 回复
        
      
      
        使用Flutter检测网络状态,推荐使用connectivity_plus包。监听网络变化并获取当前状态,如WiFi、移动数据或无网络。
更多关于flutter如何检测网络状态的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中检测网络状态,可以使用 connectivity_plus 包。以下是实现步骤:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
  connectivity_plus: ^5.0.2
运行 flutter pub get 安装。
2. 基本使用
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.none) {
    print('无网络');
  }
}
3. 监听网络变化
StreamSubscription<ConnectivityResult>? subscription;
void listenNetwork() {
  subscription = Connectivity().onConnectivityChanged.listen((result) {
    // 网络状态变化时触发
    print('网络变为: $result');
  });
}
// 取消监听
void cancelListen() {
  subscription?.cancel();
}
4. 完整示例
import 'package:flutter/material.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
  String _status = '检查中...';
  @override
  void initState() {
    super.initState();
    _checkNetwork();
    Connectivity().onConnectivityChanged.listen(_updateStatus);
  }
  void _checkNetwork() async {
    var result = await Connectivity().checkConnectivity();
    _updateStatus(result);
  }
  void _updateStatus(ConnectivityResult result) {
    setState(() {
      _status = result.toString().split('.').last;
    });
  }
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(child: Text('网络状态: $_status')),
      ),
    );
  }
}
注意事项:
- 需要网络权限(Android 在 AndroidManifest.xml添加<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>)
- iOS 无需额外配置
- 仅检测网络连接类型,不保证一定能访问互联网
对于更精确的互联网可达性检测,建议结合 http 包尝试访问特定服务器。
 
        
       
             
             
            

