getVariant<T> static method
Get variant for user
Implementation
static ABVariant<T> getVariant<T>(String experimentId) {
final experiment = _experiments[experimentId] as ABExperiment<T>?;
if (experiment == null) {
throw StateError('Experiment $experimentId not found');
}
if (!experiment.isActive) {
// Return control variant if experiment is not active
return experiment.variants.first;
}
// Check if user already has a variant assigned
if (_userVariants.containsKey(experimentId)) {
final variantName = _userVariants[experimentId]!;
return experiment.variants.firstWhere(
(v) => v.name == variantName,
orElse: () => experiment.variants.first,
);
}
// Assign new variant based on weights
final variant = _selectVariantByWeight(experiment.variants);
_userVariants[experimentId] = variant.name;
_saveUserVariants();
return variant;
}