getValue method

dynamic getValue(
  1. String key,
  2. dynamic defaultValue
)

Get a Remote Config value

Implementation

dynamic getValue(String key, dynamic defaultValue) {
  if (_remoteConfig == null) {
    if (kDebugMode) {
      debugPrint(
          '[RemoteConfig] getValue("$key"): not initialized, using default');
    }
    return defaultValue;
  }
  try {
    // When the caller provides a typed default, prefer the Firebase typed
    // getters so we respect the parameter's declared type in RC.
    if (defaultValue is bool) {
      final v = _remoteConfig!.getBool(key);
      return v;
    }
    if (defaultValue is int) {
      final v = _remoteConfig!.getInt(key);
      return v;
    }
    if (defaultValue is double || defaultValue is num) {
      final v = _remoteConfig!.getDouble(key);
      return v;
    }

    // Fallback: work with the raw string value.
    final raw = _remoteConfig!.getString(key);
    if (raw.isEmpty) {
      if (kDebugMode) {
        debugPrint('[RemoteConfig] getValue("$key"): empty, using default');
      }
      return defaultValue;
    }

    dynamic converted = raw;

    // If no explicit default is provided, infer minimally from the string.
    if (defaultValue == null) {
      // No explicit default type: infer minimally from the string.
      final trimmed = raw.trim();
      final lower = trimmed.toLowerCase();

      if (lower == 'true') {
        converted = true;
      } else if (lower == 'false') {
        converted = false;
      } else {
        final asNum = num.tryParse(trimmed);
        if (asNum != null) {
          converted = asNum;
        }
      }
    }
    return converted;
  } catch (e, stack) {
    if (kDebugMode) {
      debugPrint('[RemoteConfig] getValue("$key") failed: $e\n$stack');
    }
    return defaultValue;
  }
}