12 changed files with 220 additions and 148 deletions
@ -0,0 +1,62 @@
|
||||
// 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, |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue