initialize method

Future<void> initialize({
  1. Duration? debounceDuration,
  2. Duration? heartbeatInterval,
  3. Duration? connectionTimeout,
  4. Duration? dnsTimeout,
  5. bool forceSimulatorMode = false,
})

Initialize the connectivity manager with optional configuration Call this in main.dart before runApp

Implementation

Future<void> initialize({
  Duration? debounceDuration,
  Duration? heartbeatInterval,
  Duration? connectionTimeout,
  Duration? dnsTimeout,
  bool forceSimulatorMode = false,
}) async {
  if (_isInitialized) {
    debugPrint('⚠️ ConnectivityManager already initialized');
    return;
  }

  // Detect if running on simulator/emulator
  _isSimulator = forceSimulatorMode || await _detectSimulator();

  // Apply custom configuration
  if (debounceDuration != null) _debounceDuration = debounceDuration;

  // Adjust heartbeat and timeouts for simulator - much more aggressive
  if (_isSimulator) {
    _heartbeatInterval = heartbeatInterval ?? const Duration(seconds: 3);
    _debounceDuration = const Duration(milliseconds: 100);
    _dnsTimeout =
        dnsTimeout ?? const Duration(seconds: 1); // Faster in simulator
    debugPrint(
      '🔬 SIMULATOR MODE: Aggressive heartbeat (${_heartbeatInterval.inSeconds}s, DNS timeout: ${_dnsTimeout.inSeconds}s)',
    );
  } else {
    _heartbeatInterval = heartbeatInterval ?? const Duration(seconds: 30);
    _dnsTimeout = dnsTimeout ?? const Duration(seconds: 2);
  }

  // Add lifecycle observer
  WidgetsBinding.instance.addObserver(this);

  // Initial check
  await _checkConnectivity();

  // Listen for connectivity changes from OS
  _subscription = _connectivity.onConnectivityChanged.listen(
    _onConnectivityChanged,
    onError: (error) {
      debugPrint('❌ Connectivity subscription error: $error');
    },
  );

  // Start periodic heartbeat to catch silent failures
  _startHeartbeat();

  _isInitialized = true;
  debugPrint(
    '✅ ConnectivityManager initialized ${_isSimulator ? "(SIMULATOR MODE)" : ""}',
  );
}