evaluate<T> method

  1. @override
Future<FlagEvaluationResult<T>> evaluate<T>({
  1. required String flagKey,
  2. required T defaultValue,
  3. required List<FeatureProvider> providers,
  4. required Future<FlagEvaluationResult<T>> evaluator(
    1. FeatureProvider provider
    ),
})
override

Implementation

@override
Future<FlagEvaluationResult<T>> evaluate<T>({
  required String flagKey,
  required T defaultValue,
  required List<FeatureProvider> providers,
  required Future<FlagEvaluationResult<T>> Function(FeatureProvider provider)
  evaluator,
}) async {
  FlagEvaluationResult<T>? firstError;

  for (final provider in providers) {
    final result = await evaluator(provider);
    if (result.errorCode == null) {
      return result;
    }

    if (result.errorCode != ErrorCode.FLAG_NOT_FOUND) {
      firstError ??= result;
    }
  }

  return firstError ??
      FlagEvaluationResult.error(
        flagKey,
        defaultValue,
        ErrorCode.FLAG_NOT_FOUND,
        'Flag "$flagKey" was not found in any configured provider.',
        evaluatorId: 'MultiProvider',
      );
}