initialize method
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)" : ""}',
);
}