当你在使用Flutter进行移动应用开发中需要管理网络连接状态并采取相应措施时,使用connectivity_plus
库是一个不错的选择。这个库提供了一种简单而强大的方式来检测设备的网络连接状态,包括Wi-Fi、移动数据、以及没有网络连接的情况,在本文中,将创建一个使用connectivity_plus
库的网络工具类,并将其设计为单例模式,以便在整个应用程序中轻松管理网络连接状态。
1.安装 connectivity_plus
库
首先,确保你的Flutter项目中已经添加了 connectivity_plus
库。你可以在项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
#https://pub.dev/packages/connectivity_plus 网络监听
connectivity_plus: ^5.0.1
然后运行 flutter pub get
命令来安装依赖。
2.创建单例网络工具类
为了管理网络连接状态,要创建一个单例网络工具类,以确保只有一个实例在应用程序中运行。以下是该类的代码:
import 'package:connectivity_plus/connectivity_plus.dart';
class NetworkUtil {
static final NetworkUtil _singleton = NetworkUtil._internal();
final Connectivity _connectivity = Connectivity();
Stream<ConnectivityResult> get onConnectivityChanged =>
_connectivity.onConnectivityChanged;
NetworkUtil._internal() {
startMonitoring();
}
static NetworkUtil instance() {
return _singleton;
}
factory NetworkUtil() {
return _singleton;
}
///检查网络连接状态
///返回一个Future<ConnectivityResult>,表示当前的网络连接状态,
///可以是ConnectivityResult.none、ConnectivityResult.wifi或ConnectivityResult.mobile。
Future<ConnectivityResult> checkConnectivity2() async {
return await _connectivity.checkConnectivity();
}
///判断是否在线
Future<bool> isOnline() async {
var result = await _connectivity.checkConnectivity();
return result != ConnectivityResult.none;
}
///判断是否连接到Wi-Fi
Future<bool> isWifi() async {
var result = await _connectivity.checkConnectivity();
return result == ConnectivityResult.wifi;
}
///判断是否连接到移动数据网络
Future<bool> isMobile() async {
var result = await _connectivity.checkConnectivity();
return result == ConnectivityResult.mobile;
}
///检查网络是否可用
Future<bool> checkConnectivity() async {
var connectivityResult = await _connectivity.checkConnectivity();
return _convertConnectivityResult(connectivityResult);
}
bool _convertConnectivityResult(ConnectivityResult result) {
return result == ConnectivityResult.mobile ||
result == ConnectivityResult.wifi;
}
///监听网络状态变化
void startMonitoring() {
_connectivity.onConnectivityChanged.listen((result) {
if (_convertConnectivityResult(result)) {
print('网络连接正常');
} else {
print('没有网络连接');
}
});
}
}
3.使用
NetworkManager networkManager = NetworkManager();
// 获取连接状态
ConnectivityResult connectivityResult = await networkManager.checkConnectivity();
///写法一
// 检查是否在线
bool isOnline = await networkManager.isOnline();
// 检查是否连接到Wi-Fi
bool isWifi = await networkManager.isWifi();
// 检查是否连接到移动数据
bool isMobile = await networkManager.isMobile();
// 监听连接状态变化
networkManager.startMonitoring();
// 在连接状态变化时,可以通过订阅 `onConnectivityChanged` 流来获取通知
networkManager.onConnectivityChanged.listen((result) {
// 处理连接状态变化
});
///写法二
// 检查网络连接状态
networkManager.checkConnectivity().then((result) {
print('当前网络状态: $result');
});
// 判断是否在线
networkManager.isOnline().then((isOnline) {
print('是否在线: $isOnline');
});
// 判断是否连接到Wi-Fi
networkManager.isWifi().then((isWifi) {
print('是否连接到Wi-Fi: $isWifi');
});
// 判断是否连接到移动数据网络
networkManager.isMobile().then((isMobile) {
print('是否连接到移动数据网络: $isMobile');
});
结束!