SDK Usage
The OpenFeature Provider Intellitoggle SDK enables Dart backends to evaluate feature flags using the OpenFeature API standard.
The OpenFeature Provider Intellitoggle SDK integrates seamlessly with OpenFeature Dart SDK and supports IntelliToggle’s advanced targeting, rule-based rollouts, and experimentation platform.
This page walks you through the typical usage patterns of the SDK.
1. Prerequisites
| Dart language version >= 3.9.3 |
-
An Intellitoggle account and API key
-
Familiarity with feature flags
2. Installation
Add the OpenFeature Dart SDK and OpenFeature Provider IntelliToggle SDK to your project:
pubspec.yaml
dependencies:
openfeature_dart_server_sdk: ^0.0.12
openfeature_provider_intellitoggle: ^0.0.5
Then run:
dart pub get
3. Initialization
Before using Intellitoggle flags, you must configure the OpenFeature SDK with the Intellitoggle provider. This example shows how to initialize the SDK, set a global provider, create a client, and evaluate a flag.
import 'package:openfeature_dart_server_sdk/openfeature_dart_server_sdk.dart';
import 'package:openfeature_provider_intellitoggle/openfeature_provider_intellitoggle.dart';
void main() async {
// Initialize provider with OAuth2 client secret
final provider = IntelliToggleProvider(
sdkKey: 'YOUR_CLIENT_SECRET',
options: IntelliToggleOptions.production(),
);
// Set as global provider
await OpenFeatureAPI().setProvider(provider);
// Create client
final client = IntelliToggleClient(
FeatureClient(
metadata: ClientMetadata(name: 'my-service'),
hookManager: HookManager(),
),
);
}
4. Basic Usage
Once the Intellitoggle provider is initialized and set as the global provider, using it in your application is straightforward.
The OpenFeature client exposes simple methods to evaluate feature flags and return either a default value or a value defined in the Intellitoggle platform.
Minimal evaluation:
final enabled = await client.getBooleanValue('new-api-endpoint', false);
Flag evaluation with targeting & context:
// Evaluate flags
final enabled = await client.getBooleanValue(
'new-api-endpoint',
false,
targetingKey: 'user-123',
evaluationContext: {
'role': 'admin',
'plan': 'enterprise',
'region': 'us-east',
},
);
print('Feature enabled: $enabled');
5. Advanced Usage
Beyond simple flag checks, the Intellitoggle provider supports advanced features that allow fine-grained targeting, dynamic contexts, and lifecycle event handling. These capabilities make it possible to model complex real-world scenarios such as organizations, devices, or services in addition to individual users.
5.1. Contextual Evaluation
You can pass both a targeting key and an evaluation context when resolving flags. This allows segmentation by user roles, plans, or regions.
// Evaluate a flag with user targeting and custom attributes
final enabled = await client.getBooleanValue(
'new-api-endpoint',
false,
targetingKey: 'user-123',
evaluationContext: {
'role': 'admin',
'plan': 'enterprise',
'region': 'us-east',
},
);
print('Feature enabled: $enabled');
5.2. Multi-Context Evaluation
Evaluate flags against multiple entities at once, such as a user and their organization.
final multiContext = client.createMultiContext({
'user': {
'targetingKey': 'user-123',
'role': 'admin',
'plan': 'enterprise',
},
'organization': {
'targetingKey': 'org-456',
'tier': 'premium',
'industry': 'fintech',
},
});
final config = await client.getObjectValue(
'feature-config',
{},
evaluationContext: multiContext.attributes,
);
5.3. Custom Context Types
Define your own context kinds (e.g., device, service) with arbitrary attributes.
final deviceContext = client.createContext(
targetingKey: 'device-789',
kind: 'device',
customAttributes: {
'os': 'linux',
'version': '5.4.0',
'datacenter': 'us-west-2',
},
);
final threshold = await client.getIntegerValue(
'rate-limit',
1000,
evaluationContext: deviceContext.attributes,
);
5.4. Event Handling
The Intellitoggle provider emits lifecycle events you can subscribe to, such as readiness, configuration changes, and errors.
provider.events.listen((event) {
switch (event.type) {
case IntelliToggleEventType.ready:
print('Provider ready');
break;
case IntelliToggleEventType.configurationChanged:
print('Flags updated: ${event.data?['flagsChanged']}');
break;
case IntelliToggleEventType.error:
print('Error: ${event.message}');
break;
}
});
5.5. Global Context
Set attributes that apply globally to all evaluations. This is useful for environment- or service-level context.
// Set global context for all flag evaluations
OpenFeatureAPI().setGlobalContext(
OpenFeatureEvaluationContext({
'environment': 'production',
'service': 'api-gateway',
'version': '2.1.0',
})
);
6. Configuration Options
The IntelliToggleOptions class allows you to customize how the SDK interacts with
the Intellitoggle service. You can use the built-in presets for production and
development environments, or define your own custom configuration.
6.1. Production Configuration
Use this when deploying your application in a production environment.
final options = IntelliToggleOptions.production(
baseUri: Uri.parse('https://api.intellitoggle.com'),
timeout: Duration(seconds: 10),
pollingInterval: Duration(minutes: 5),
);
7. Provider Options
The IntelliToggleProvider accepts an IntelliToggleOptions object to control
how the SDK connects to the Intellitoggle service and manages feature flag updates.
7.1. IntelliToggleOptions
| Option | Description | Default |
|---|---|---|
|
API endpoint used to fetch flag configurations |
|
|
Maximum request duration before failing |
|
|
Whether to poll periodically for configuration changes |
|
|
How often to poll for updates when polling is enabled |
|
|
Enables real-time updates from the service if supported |
|
|
Number of retry attempts for failed requests |
|
|
Enables verbose debug logging for troubleshooting |
|
You can combine these options or define your own when creating the provider:
final provider = IntelliToggleProvider(
sdkKey: 'YOUR_CLIENT_SECRET',
options: IntelliToggleOptions(
timeout: Duration(seconds: 15),
enablePolling: true,
pollingInterval: Duration(minutes: 2),
enableStreaming: true,
maxRetries: 5,
enableLogging: true,
),
);
8. Resources
-
OpenFeature Dart SDK → OpenFeature Dart SDK
-
Intellitoggle Provider → IntelliToggle Provider