import 'package:flutter/foundation.dart'; import 'feature.dart'; /// Unveränderlicher Satz an Feature-Schaltern, geladen aus /// `assets/feature_flags.json` (siehe [FeatureFlagsRepository]). /// /// Erwartetes Format: /// ```json /// { "features": { "": { "enabled": true, "description": "…" } } } /// ``` /// `description` ist nur Doku für Menschen. Unbekannte Keys werden /// ignoriert, fehlende fallen auf [Feature.defaultEnabled] zurück. @immutable class FeatureFlags { const FeatureFlags(this._enabledByKey); factory FeatureFlags.fromJson(Map json) { final features = json['features']; if (features is! Map) { throw const FormatException('feature_flags.json: "features" fehlt.'); } final knownKeys = {for (final f in Feature.values) f.key}; final enabledByKey = {}; features.forEach((key, value) { final enabled = value is Map ? value['enabled'] : null; if (enabled is! bool) { throw FormatException( 'feature_flags.json: "$key.enabled" muss true oder false sein.', ); } if (!knownKeys.contains(key)) { debugPrint('FeatureFlags: unbekannter Key "$key" wird ignoriert.'); return; } enabledByKey[key] = enabled; }); return FeatureFlags(enabledByKey); } final Map _enabledByKey; bool isEnabled(Feature feature) => _enabledByKey[feature.key] ?? feature.defaultEnabled; }