resolveParameterValue method

FutureOr<EncodingValue<String, Object?>> resolveParameterValue(
  1. String valueKey,
  2. ConditionParameter value,
  3. EncodingContext context,
  4. Type? valueType, {
  5. bool valueAsList = false,
})

Implementation

FutureOr<EncodingValue<String, Object?>> resolveParameterValue(
    String valueKey,
    ConditionParameter value,
    EncodingContext context,
    Type? valueType,
    {bool valueAsList = false}) {
  if (valueAsList) {
    return _resolveParameterValueImpl(value, context, valueType, true)
        .resolveMapped((values) {
      var list = values is List
          ? values
          : (values is Iterable ? values.toList(growable: false) : [values]);

      var placeHolders = list.mapIndexed((i, v) {
        var k = parameterPlaceholderIndexKey(valueKey, i);
        context.parametersPlaceholders[k] ??= v;
        var placeholder = parameterPlaceholder(k);
        return EncodingPlaceholderIndex(valueKey, valueType, placeholder, i,
            encodeEncodingPlaceholderIndex);
      }).toList();

      return EncodingValueList(
          valueKey, valueType, placeHolders, encodeEncodingValueList);
    });
  } else {
    var placeholder = parameterPlaceholder(valueKey);

    if (!context.parametersPlaceholders.containsKey(valueKey)) {
      return _resolveParameterValueImpl(value, context, valueType, false)
          .resolveMapped((val) {
        context.parametersPlaceholders[valueKey] ??= val;
        return EncodingPlaceholder(
            valueKey, valueType, placeholder, encodeEncodingPlaceholder);
      });
    } else {
      return EncodingPlaceholder(
          valueKey, valueType, placeholder, encodeEncodingPlaceholder);
    }
  }
}