getAllFlags method

Future<List<FeatureFlag>> getAllFlags({
  1. bool forceRefresh = false,
})

Retrieves all available feature flags, merging defaults with user overrides.

If forceRefresh is true, it triggers a fetch from the remote server.

Implementation

Future<List<FeatureFlag>> getAllFlags({bool forceRefresh = false}) async {
  if (forceRefresh) {
    log('Forcing fresh load of feature flags', name: 'FeatureFlagRepository');
    _defaultsCache = null;
    _flagsCache = null;
    await firebaseService.fetch();
  }

  if (_flagsCache != null) return _flagsCache!;

  final defaults = await _getDefaults(forceRefresh: forceRefresh);
  final forceOverrides = _parseForceOverrides(defaults);

  final futures = defaults.entries
      .where((e) => e.key != '_force_override_flags')
      .map(
        (entry) => _createFeatureFlag(entry.key, entry.value, forceOverrides),
      );

  final result = await Future.wait(futures);
  final logMap = {for (final f in result) f.key: f.value};

  log('Feature flags loaded: $logMap', name: 'FeatureFlagRepository');
  firebaseService.log('Feature flags loaded: $logMap');

  return _flagsCache = result;
}