convertTo<T> method
Converts the source
object from a known sourceType
to a targetType
using full type metadata via Class
.
This method provides the most powerful form of type conversion and supports deep, generic-aware resolution.
Example:
final source = {'date': '2025-07-01'};
final targetType = Class.mapOf(Class<String>(), Class<DateTime>());
final result = service.convertTo(source, Class.forObject(source), targetType);
Implementation
@override
Object? convertTo<T>(Object? source, Class targetType, [Class? sourceType]) {
sourceType ??= (source != null ? _getSourceType(source) : null);
if (sourceType == null) {
if (source != null) {
throw ConversionException('Source must be [null] if source type == [null]');
}
return _handleResult<T>(null, targetType, _convertNullableSource(null, targetType));
}
if (source != null && !sourceType.isInstance(source)) {
throw ConversionException('Source to convert from must be an instance of [$sourceType]; instead it was a [${source.runtimeType}]');
}
final converter = _getConverter(sourceType, targetType);
if (converter != null) {
final result = ConversionUtils.invoke<T>(converter, source, sourceType, targetType);
return _handleResult<T>(sourceType, targetType, result);
}
return _handleConverterNotFound<T>(source, sourceType, targetType);
}