52 lines
1.4 KiB
Dart
52 lines
1.4 KiB
Dart
import 'package:connectivity_plus/connectivity_plus.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:onufitness/widgets/network/no_network_widget.dart';
|
|
|
|
class NetworkController extends GetxController {
|
|
final Connectivity _connectivity = Connectivity();
|
|
RxBool isConnected = true.obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
_initConnectivity();
|
|
_connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
|
|
}
|
|
|
|
void _initConnectivity() async {
|
|
final result = await _connectivity.checkConnectivity();
|
|
_handleInitialConnection(result);
|
|
}
|
|
|
|
void _handleInitialConnection(ConnectivityResult result) {
|
|
bool hasConnection = result != ConnectivityResult.none;
|
|
isConnected.value = hasConnection;
|
|
|
|
if (!hasConnection) {
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
if (!Get.isDialogOpen!) {
|
|
Get.dialog(const NoInternetDialog(), barrierDismissible: false);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
void _updateConnectionStatus(ConnectivityResult result) {
|
|
bool hasConnection = result != ConnectivityResult.none;
|
|
if (hasConnection != isConnected.value) {
|
|
isConnected.value = hasConnection;
|
|
|
|
if (!hasConnection) {
|
|
if (!Get.isDialogOpen!) {
|
|
Get.dialog(const NoInternetDialog(), barrierDismissible: false);
|
|
}
|
|
} else {
|
|
if (Get.isDialogOpen!) {
|
|
Get.back();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|