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.
62 lines
1.7 KiB
62 lines
1.7 KiB
// 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, |
|
); |
|
} |
|
}
|
|
|