setProvider method
Implementation
Future<void> setProvider(FeatureProvider provider) async {
_logger.info('Setting provider: ${provider.name}');
try {
// Only initialize if provider is NOT_READY
if (provider.state == ProviderState.NOT_READY) {
await provider.initialize();
}
_provider = provider;
_providerStreamController.add(provider);
// Emit appropriate event based on state
if (provider.state == ProviderState.READY) {
_emitEvent(
OpenFeatureEventType.PROVIDER_READY,
'Provider ready: ${provider.name}',
);
} else {
_emitEvent(
OpenFeatureEventType.PROVIDER_ERROR,
'Provider not ready: ${provider.name}',
data: {'state': provider.state.name},
);
}
} catch (error) {
_logger.severe('Failed to initialize provider: $error');
// Per OpenFeature spec: keep provider in ERROR state
_provider = provider;
_providerStreamController.add(provider);
_emitEvent(
OpenFeatureEventType.PROVIDER_ERROR,
'Provider initialization failed: ${provider.name}',
data: error,
);
}
}