getVariant<T> static method

ABVariant<T> getVariant<T>(
  1. String experimentId
)

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;
}