setFlag method

Future<void> setFlag(
  1. String key,
  2. dynamic value
)

Persistently overrides a feature flag value.

Passing null as the value will remove the override.

Implementation

Future<void> setFlag(String key, dynamic value) async {
  final prefKey = 'ff_$key';
  if (value == null) {
    log(
      'Feature flag "$key" reset to default',
      name: 'FeatureFlagRepository',
    );
    firebaseService.log('Feature flag "$key" reset to default');
    await _prefs.remove(prefKey);
    return;
  }

  log(
    'Feature flag "$key" changed to: $value',
    name: 'FeatureFlagRepository',
  );
  firebaseService.log('Feature flag "$key" changed to: $value');

  await (switch (value) {
    bool v => _prefs.setBool(prefKey, v),
    int v => _prefs.setInt(prefKey, v),
    double v => _prefs.setDouble(prefKey, v),
    String v => _prefs.setString(prefKey, v),
    _ => throw ArgumentError('Unsupported flag type: ${value.runtimeType}'),
  });

  _flagsCache = null;
}