initializeEmulatorAddress static method

Future<void> initializeEmulatorAddress()

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