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.
63 lines
1.7 KiB
63 lines
1.7 KiB
2 weeks ago
|
// lib/data/providers/connectivity_provider.dart
|
||
|
import 'dart:async';
|
||
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
||
|
import 'package:get/get.dart';
|
||
|
import 'package:flutter/material.dart';
|
||
|
|
||
|
class ConnectivityProvider extends GetxService {
|
||
|
final Connectivity _connectivity = Connectivity();
|
||
|
final RxBool isOnline = false.obs;
|
||
|
late StreamSubscription<List<ConnectivityResult>> _connectivitySubscription;
|
||
|
|
||
|
@override
|
||
|
void onInit() {
|
||
|
super.onInit();
|
||
|
_initConnectivityListener();
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
void onClose() {
|
||
|
_connectivitySubscription.cancel();
|
||
|
super.onClose();
|
||
|
}
|
||
|
|
||
|
Future<void> _initConnectivityListener() async {
|
||
|
_connectivitySubscription = _connectivity.onConnectivityChanged.listen((
|
||
|
results,
|
||
|
) {
|
||
|
final isConnected = results.any(
|
||
|
(result) =>
|
||
|
result == ConnectivityResult.mobile ||
|
||
|
result == ConnectivityResult.wifi ||
|
||
|
result == ConnectivityResult.ethernet,
|
||
|
);
|
||
|
isOnline.value = isConnected;
|
||
|
if (isConnected) {
|
||
|
Get.snackbar(
|
||
|
'网络状态',
|
||
|
'已连接到网络',
|
||
|
colorText: Colors.white,
|
||
|
backgroundColor: Colors.green,
|
||
|
snackPosition: SnackPosition.TOP,
|
||
|
);
|
||
|
} else {
|
||
|
Get.snackbar(
|
||
|
'网络状态',
|
||
|
'已断开网络连接',
|
||
|
colorText: Colors.white,
|
||
|
backgroundColor: Colors.red,
|
||
|
snackPosition: SnackPosition.TOP,
|
||
|
);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
final initialResults = await _connectivity.checkConnectivity();
|
||
|
isOnline.value = initialResults.any(
|
||
|
(result) =>
|
||
|
result == ConnectivityResult.mobile ||
|
||
|
result == ConnectivityResult.wifi ||
|
||
|
result == ConnectivityResult.ethernet,
|
||
|
);
|
||
|
}
|
||
|
}
|