You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.3 KiB

// lib/data/providers/connectivity_provider.dart
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:get/get.dart';
class NetworkStatusService extends GetxService {
final Connectivity _connectivity = Connectivity();
final RxBool isOnline = false.obs;
StreamSubscription<List<ConnectivityResult>>? _connectivitySubscription;
@override
void onInit() {
super.onInit();
_initConnectivityListener();
_checkInitialConnectivity();
}
@override
void onClose() {
_connectivitySubscription?.cancel();
super.onClose();
}
void _initConnectivityListener() {
_connectivitySubscription = _connectivity.onConnectivityChanged.listen((
results,
) {
isOnline.value = _isConnected(results);
// UI 层监听 isOnline.value 变化后自行处理提示
});
}
Future<void> _checkInitialConnectivity() async {
final initialResults = await _connectivity.checkConnectivity();
isOnline.value = _isConnected(initialResults);
}
bool _isConnected(List<ConnectivityResult> results) {
return results.any(
(result) =>
result == ConnectivityResult.mobile ||
result == ConnectivityResult.wifi ||
result == ConnectivityResult.ethernet,
);
}
}