56 lines
1.1 KiB
Dart
56 lines
1.1 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
import 'package:get/get.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
mixin ConnectivityControllerMixin on GetxController {
|
|
final RxBool isOnline = true.obs;
|
|
Timer? _tick;
|
|
|
|
@protected
|
|
Future<bool> checkInternet() async {
|
|
try {
|
|
final result = await InternetAddress.lookup('example.com');
|
|
return result.isNotEmpty && result.first.rawAddress.isNotEmpty;
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
@protected
|
|
void onConnectivityOnline() {}
|
|
|
|
@protected
|
|
void onConnectivityOffline() {}
|
|
|
|
void _startWatcher() {
|
|
_tick?.cancel();
|
|
_tick = Timer.periodic(const Duration(seconds: 5), (_) async {
|
|
final ok = await checkInternet();
|
|
final prev = isOnline.value;
|
|
if (ok != prev) {
|
|
isOnline.value = ok;
|
|
if (ok) {
|
|
onConnectivityOnline();
|
|
} else {
|
|
onConnectivityOffline();
|
|
}
|
|
} else {
|
|
isOnline.value = ok;
|
|
}
|
|
});
|
|
}
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
_startWatcher();
|
|
}
|
|
|
|
@override
|
|
void onClose() {
|
|
_tick?.cancel();
|
|
super.onClose();
|
|
}
|
|
}
|