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,
      );
    }
  }
}