Files
2026-05-27 10:35:09 +05:30

74 lines
2.2 KiB
Dart

import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../Globalwidgets/textwidget.dart';
import '../../Helper/Constants/Colorconstants.dart';
class ConnectivityController extends GetxController {
final isOffline = false.obs;
final Connectivity _connectivity = Connectivity();
late StreamSubscription<List<ConnectivityResult>> _subscription;
bool _wasOffline = false;
@override
void onInit() {
super.onInit();
_checkInitialConnection();
_subscription = _connectivity.onConnectivityChanged.listen(_updateStatus);
}
Future<void> _checkInitialConnection() async {
final result = await _connectivity.checkConnectivity();
_updateStatus([result.first]);
}
void _updateStatus(List<ConnectivityResult> results) {
final isCurrentlyOffline = !results.any((r) => r == ConnectivityResult.mobile || r == ConnectivityResult.wifi);
if (isCurrentlyOffline != isOffline.value) {
isOffline.value = isCurrentlyOffline;
final context = Get.context!;
if (isCurrentlyOffline) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: TextWidget(
color: ColorConstants.secondaryColor,
text: "You are currently offline",
),
backgroundColor: Theme.of(context).colorScheme.error,
duration: Duration(days: 1), // Until dismissed or back online
behavior: SnackBarBehavior.floating,
),
);
} else {
if (_wasOffline) {
ScaffoldMessenger.of(context).clearSnackBars();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: TextWidget(
text: "You are connected to the internet",
color: ColorConstants.secondaryColor,
),
backgroundColor: Colors.green,
behavior: SnackBarBehavior.floating,
duration: const Duration(seconds: 3),
),
);
}
}
_wasOffline = isCurrentlyOffline;
}
}
@override
void onClose() {
_subscription.cancel();
super.onClose();
}
}