initializeEmulatorAddress static method
Initialize the emulator address with automatic discovery if needed Call this before connecting to Firebase emulators This is separate from the main init because it is expensive and should not block app startup outside of using the Firebase emulator
Implementation
static Future<void> initializeEmulatorAddress() async {
if (_emulatorAddressInitialized) {
return; // Already initialized
}
// Check if environment variable is set first
const envValue = String.fromEnvironment('BACKEND_EMULATOR_REMOTE_ADDRESS');
if (envValue.isNotEmpty) {
_backendEmulatorRemoteAddress = envValue;
logd('Using environment-specified emulator address: $envValue');
_emulatorAddressInitialized = true;
return;
}
try {
// Check if we're running on an emulator/simulator
final isEmulator = await DeviceUtils.isRunningOnEmulator();
logd('Running on emulator/simulator: $isEmulator');
if (isEmulator) {
// Use platform-specific emulator addresses
_backendEmulatorRemoteAddress = _getPlatformDefaultEmulatorAddress();
logd('Using platform default emulator address: $_backendEmulatorRemoteAddress');
} else {
// Physical device - discover the host machine IP
logd('Physical device detected, discovering Firebase emulator host...');
final discoveredIp =
await NetworkUtils.discoverFirebaseEmulatorHost(port: backendEmulatorFunctionsPort);
if (discoveredIp != null) {
_backendEmulatorRemoteAddress = discoveredIp;
logd('Using discovered emulator host: $discoveredIp');
} else {
_backendEmulatorRemoteAddress = _getPlatformDefaultEmulatorAddress();
logw(
'Could not discover emulator host, using platform default: $_backendEmulatorRemoteAddress');
}
}
} catch (e) {
_backendEmulatorRemoteAddress = _getPlatformDefaultEmulatorAddress();
loge(
'Error during emulator address initialization: $e, using default: $_backendEmulatorRemoteAddress');
} finally {
_emulatorAddressInitialized = true;
}
}