getBatchFlags method

Map<String, dynamic> getBatchFlags(
  1. Map<String, dynamic> flagRequests
)

Batch flag evaluation for performance

Evaluates multiple flags in a single operation for better performance. Useful when you need to check many flags at once.

Parameters

  • flagRequests: Map of flag keys to their default values

Returns

Map of flag keys to their evaluated values

Example

final flags = client.getBatchFlags({
  'feature_a': false,
  'feature_b': true,
  'api_timeout': 5000.0,
  'theme_color': '#007AFF',
});

final featureA = flags['feature_a'] as bool;
final timeout = flags['api_timeout'] as double;

Implementation

Map<String, dynamic> getBatchFlags(Map<String, dynamic> flagRequests) {
  try {
    Logger.d('🏁 Evaluating ${flagRequests.length} flags in batch');

    final results = <String, dynamic>{};
    final allFlags = _configManager.getAllFlags();

    for (final entry in flagRequests.entries) {
      final key = entry.key;
      final defaultValue = entry.value;

      try {
        final flagValue = allFlags[key];

        if (flagValue == null) {
          results[key] = defaultValue;
          continue;
        }

        // Extract value based on default value type
        final value = _extractTypedValueDynamic(flagValue, defaultValue);
        results[key] = value;

        // Track summary for this flag evaluation
        final fullConfig = _configManager.getFullFlagConfig(key);
        final summaryConfig = fullConfig != null
            ? Map<String, dynamic>.from(fullConfig)
            : <String, dynamic>{};

        // Add evaluation context
        summaryConfig.addAll({
          'key': key,
          'value': flagValue,
          'variation': value,
        });

        _trackFlagSummary(key, summaryConfig, value);
      } catch (e) {
        Logger.w('🏁 Error evaluating flag "$key" in batch: $e');
        results[key] = defaultValue;
      }
    }

    Logger.i('🏁 Batch evaluation completed: ${results.length} flags');
    return results;
  } catch (e) {
    Logger.e('🏁 Error in batch flag evaluation: $e');
    // Return defaults for all requested flags
    return Map<String, dynamic>.from(flagRequests);
  }
}