flutter写Linux桌面中如何获取当前网络情况
connectivity_plus
connectivity_plus
是一个流行的Flutter插件,用于发现网络连接状态的变化。
它可以获取用户的设备当前是使用WI-FI、移动网络还是额米有网络连接
可以设置监听器来响应网络状态的变化
/// 网络状态
ConnectivityResult _networkConnectionStatus = ConnectivityResult.none;
/// 网络连接
final Connectivity _connectivity = Connectivity();
late StreamSubscription<ConnectivityResult> _connectivitySubscription;
void initState() {
super.initState();
_connectivitySubscription =
_connectivity.onConnectivityChanged.listen(_updateConnectStatus);
}
/// 当网络状态发生改变时,更新网络状态
Future<void> _updateConnectStatus(ConnectivityResult result) async {
setState(() {
_networkConnectionStatus = result;
});
}
Container(
height: size - 10,
width: size - 10,
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
border: Border.all(
width: 1.5,
color: const Color(0xFFECEDEE))),
child: _networkConnectionStatus ==
ConnectivityResult.none ? WifiOff(size: size)
: Qrcode(size: size, ),
)
internet_connection_checker
internet_connection_checker
是一个轻量级的包,用于快速检查设备是否真正连接到了互联网,而不仅仅是局域网内。
它可以用来补充connectivity_plus
功能,因为connectivity_plus
仅能检查网络连接的存在,而不一定保证互联网的可用性。
import 'dart:async';
import 'package:internet_connection_checker/internet_connection_checker.dart';
/// 网络监听工具
/// * [monitorNetworkAndUpload] : 检查网络并上传
/// * [isNetworkConnected] : 返回网络情况 网络是否可用
class NetworkMonitor {
/// 检查网络并上传
Future<void> monitorNetworkAndUpload() async {
Timer.periodic(const Duration(seconds: 5), (_) => _monitorNetwork());
}
/// 返回网络情况 网络是否可用
Future<bool> isNetworkConnected() async {
final isConnected = await InternetConnectionChecker().hasConnection;
return isConnected;
}
/// 监听网络并上传
Future<void> _monitorNetwork() async {
bool previoursConnectionStatus = false;
bool isConnected = await InternetConnectionChecker().hasConnection;
if (isConnected && !previoursConnectionStatus) {
/// 有网,执行上传等操作
await _performBackgroundUpload();
}
}
/// 上传训练数据
Future<void> _performBackgroundUpload() async {
/// 上传
print('上传');
}
}