getBatchFlags method
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);
}
}