paramValuesFromObjects function
Converts a list of objects to ParamValue instances.
Fast path: if all items are already ParamValue or null,
converts and returns efficiently.
Supported implicit input types:
null→ParamValueNullParamValue→ returned as-is (fast path)int→ParamValueInt32orParamValueInt64(based on range)String→ParamValueStringList<int>→ParamValueBinarybool→ParamValueInt32(1|0)(canonical mapping)double→ParamValueDecimal(value.toString())(canonical mapping)DateTime→ParamValueString(value.toUtc().toIso8601String())(canonical mapping)
Throws ArgumentError for unsupported types with actionable message.
Example:
final params = paramValuesFromObjects([1, 'hello', null]);
// Returns: [ParamValueInt32(1), ParamValueString('hello'), ParamValueNull()]
Implementation
List<ParamValue> paramValuesFromObjects(List<Object?> params) {
// Fast path: check if all items are already ParamValue or null
if (params.isNotEmpty) {
var allParamValueOrNull = true;
for (final item in params) {
if (item != null && item is! ParamValue) {
allParamValueOrNull = false;
break;
}
}
if (allParamValueOrNull) {
// Fast path: convert nulls to ParamValueNull, skip other items
final result =
List<ParamValue>.filled(params.length, const ParamValueNull());
for (var i = 0; i < params.length; i++) {
final item = params[i];
if (item is ParamValue) {
result[i] = item;
}
}
return result;
}
}
// Pre-size output list for better performance
final result = List<ParamValue>.filled(params.length, const ParamValueNull());
for (var i = 0; i < params.length; i++) {
result[i] = toParamValue(params[i]);
}
return result;
}