getValueDetails<T> method

Future<EvaluationDetails<T>> getValueDetails<T>({
  1. required String key,
  2. required T defaultValue,
  3. ConfigCatUser? user,
})

Gets the value and evaluation details of a feature flag or setting identified by the given key.

key is the identifier of the feature flag or setting. user is the user object to identify the caller.

Implementation

Future<EvaluationDetails<T>> getValueDetails<T>({
  required String key,
  required T defaultValue,
  ConfigCatUser? user,
}) async {
  final evalUser = user ?? _defaultUser;
  try {
    final result = await _getSettings();
    if (result.isEmpty) {
      final err =
          'Config JSON is not present when evaluating setting \'$key\'. Returning the `defaultValue` parameter that you specified in your application: \'$defaultValue\'.';
      _errorReporter.error(1000, err);
      final details =
          EvaluationDetails.makeError(key, defaultValue, err, evalUser);
      hooks.invokeFlagEvaluated(details);
      return details;
    }
    final setting = result.settings[key];
    if (setting == null) {
      final err =
          'Failed to evaluate setting \'$key\' (the key was not found in config JSON). Returning the `defaultValue` parameter that you specified in your application: \'$defaultValue\'. Available keys: [${result.settings.keys.map((e) => '\'$e\'').join(', ')}].';
      _errorReporter.error(1001, err);
      final details =
          EvaluationDetails.makeError(key, defaultValue, err, evalUser);
      hooks.invokeFlagEvaluated(details);
      return details;
    }

    return _evaluate(key, setting, evalUser, result.fetchTime);
  } catch (e, s) {
    final err =
        'Error occurred in the `getValueDetails` method while evaluating setting \'$key\'. Returning the `defaultValue` parameter that you specified in your application: \'$defaultValue\'.';
    _errorReporter.error(1002, err, e, s);
    final details =
        EvaluationDetails.makeError(key, defaultValue, err, evalUser);
    hooks.invokeFlagEvaluated(details);
    return details;
  }
}