Implementation
Future<bool> get hasInternet async {
final shuffledHosts = [..._mHosts];
shuffledHosts.shuffle(Random());
for (final host in shuffledHosts) {
HttpClient? client;
try {
client = HttpClient();
client.connectionTimeout = Duration(seconds: 10);
client.idleTimeout = Duration(seconds: 5);
final request = await client.headUrl(Uri.parse(host));
request.headers.set('User-Agent', 'NetworkMonitor/1.0');
request.headers.set('Cache-Control', 'no-cache');
final response = await request.close();
if (response.statusCode >= 200 && response.statusCode < 300) {
return true;
}
} catch (e) {
continue;
} finally {
client?.close(force: true);
}
}
return false;
}