amplitude_experiments_flutter 0.0.1 copy "amplitude_experiments_flutter: ^0.0.1" to clipboard
amplitude_experiments_flutter: ^0.0.1 copied to clipboard

Flutter SDK for Amplitude Experiment. Provides feature flags and A/B testing capabilities with native iOS and Android support.

Amplitude Experiments Flutter #

Flutter SDK for Amplitude Experiment, providing feature flags and A/B testing capabilities.

Features #

  • Initialize Amplitude Experiments client
  • Fetch feature flag variants for users
  • Access variants with fallback values
  • Manual exposure tracking
  • Integration with Amplitude Analytics

Installation #

Add this to your pubspec.yaml:

dependencies:
  amplitude_experiments_flutter:
    git:
      url: https://github.com/user/amplitude_experiments_flutter
      path: packages/amplitude_experiments_flutter

Platform Requirements #

Platform Minimum Version
iOS 13.0
Android API 24

Usage #

Initialize #

import 'package:amplitude_experiments_flutter/amplitude_experiments_flutter.dart';

// Basic initialization
await AmplitudeExperiments.initialize('YOUR-DEPLOYMENT-KEY');

// With configuration
await AmplitudeExperiments.initialize(
  'YOUR-DEPLOYMENT-KEY',
  config: const ExperimentConfig(
    debug: true,
    fetchOnStart: true,
    automaticExposureTracking: true,
  ),
);

Fetch Variants #

// Fetch for a specific user
await AmplitudeExperiments.fetch(
  const ExperimentUser(
    userId: 'user-123',
    deviceId: 'device-456',
    userProperties: {'plan': 'premium'},
  ),
);

// Fetch for anonymous user
await AmplitudeExperiments.fetch();

Get Variant #

// Get a variant with fallback
final variant = await AmplitudeExperiments.variant(
  'my-feature-flag',
  const Variant(key: 'control', value: 'off'),
);

// Check variant value
if (variant?.value == 'on') {
  // Show new feature
}

// Check if variant is "on"
if (variant?.isOn == true) {
  // Feature is enabled
}

Get All Variants #

final variants = await AmplitudeExperiments.all();

for (final entry in variants.entries) {
  print('${entry.key}: ${entry.value.value}');
}

Track Exposure #

// Manual exposure tracking (when automaticExposureTracking is false)
await AmplitudeExperiments.exposure('my-feature-flag');

Clear Cache #

// Clear all cached variants (useful on logout)
await AmplitudeExperiments.clear();

Configuration Options #

Option Type Default Description
debug bool false Enable debug logging
instanceName String? null Instance name for multiple clients
serverZone ServerZone us Server zone (us or eu)
fetchTimeoutMillis int 10000 Fetch request timeout in ms
retryFetchOnFailure bool true Retry failed fetch requests
automaticExposureTracking bool true Auto-track exposures on variant access
fetchOnStart bool false Fetch variants on initialization
initialVariants Map<String, Variant>? null Pre-populate variants

Models #

ExperimentUser #

const user = ExperimentUser(
  userId: 'user-123',
  deviceId: 'device-456',
  userProperties: {'plan': 'premium', 'age': 25},
  groups: {'company': ['Acme Inc']},
);

Variant #

final variant = Variant(
  key: 'treatment',
  value: 'on',
  payload: {'color': 'blue'},
);

// Properties
variant.key;      // Variant key
variant.value;    // Variant value
variant.payload;  // Optional JSON payload
variant.isOn;     // true if value is "on"
variant.isOff;    // true if value is null, empty, or "off"

Example #

See the example directory for a complete sample app.

License #

MIT License - see LICENSE for details.