hasInternet property

Future<bool> get hasInternet

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;
}