check static method
Returns true if online. Caches result for _recheckInterval.
Implementation
static Future<bool> check() async {
// Return cached result if recent enough
if (_lastCheckTime != null &&
DateTime.now().difference(_lastCheckTime!) < _recheckInterval) {
return _lastResult;
}
// Prevent concurrent checks
if (_isChecking) {
// Wait for ongoing check (max 6s)
for (var i = 0; i < 60; i++) {
await Future.delayed(const Duration(milliseconds: 100));
if (!_isChecking) return _lastResult;
}
return _lastResult;
}
_isChecking = true;
try {
final result = await InternetAddress.lookup(
'google.com',
).timeout(const Duration(seconds: 5));
_lastResult = result.isNotEmpty && result.first.rawAddress.isNotEmpty;
} on SocketException {
_lastResult = false;
} on TimeoutException {
_lastResult = false;
} catch (_) {
_lastResult = false;
} finally {
_lastCheckTime = DateTime.now();
_isChecking = false;
}
dPrint(
'🌐 AdsConnectivity: ${_lastResult ? "Online ✅" : "Offline ❌"} '
'(next check in ${_recheckInterval.inSeconds}s)',
);
return _lastResult;
}