setProvider method

Future<void> setProvider(
  1. FeatureProvider provider
)

Implementation

Future<void> setProvider(FeatureProvider provider) async {
  _logger.info('Setting provider: ${provider.name}');

  try {
    if (provider.state == ProviderState.NOT_READY) {
      await provider.initialize();
    }

    _provider = provider;
    _providerRegistry[provider.metadata.name] = provider;
    _providerStreamController.add(provider);

    if (provider.state == ProviderState.READY) {
      _emitEvent(
        OpenFeatureEventType.PROVIDER_READY,
        'Provider ready: ${provider.name}',
        providerMetadata: provider.metadata,
      );
    } else {
      _emitEvent(
        OpenFeatureEventType.PROVIDER_ERROR,
        'Provider not ready: ${provider.name}',
        data: {'state': provider.state.name},
        providerMetadata: provider.metadata,
        errorCode: _errorCodeFrom(null, state: provider.state),
      );
    }
  } catch (error) {
    _logger.severe('Failed to initialize provider: $error');
    _provider = provider;
    _providerRegistry[provider.metadata.name] = provider;
    _providerStreamController.add(provider);
    _emitEvent(
      OpenFeatureEventType.PROVIDER_ERROR,
      'Provider initialization failed: ${provider.name}',
      data: error,
      providerMetadata: provider.metadata,
      errorCode: _errorCodeFrom(error),
    );
  }
}