resolveValueByType<T> method
FutureOr<T?>
resolveValueByType<T>(
- TypeInfo? type,
- Object? value, {
- EntityProvider? entityProvider,
- EntityCache? entityCache,
- EntityHandlerProvider? entityHandlerProvider,
- EntityRepositoryProvider? entityRepositoryProvider,
- EntityResolutionRules? resolutionRules,
Implementation
FutureOr<T?> resolveValueByType<T>(TypeInfo? type, Object? value,
{EntityProvider? entityProvider,
EntityCache? entityCache,
EntityHandlerProvider? entityHandlerProvider,
EntityRepositoryProvider? entityRepositoryProvider,
EntityResolutionRules? resolutionRules}) {
if (type == null) {
return value as T?;
}
if (type.isPrimitiveType) {
return type.parse(value) as T?;
} else if (type.equalsType(_typeInfoTime)) {
return Time.from(value) as T?;
} else if (type.equalsType(_typeInfoDateTime)) {
return TypeParser.parseDateTime(value) as T?;
} else if (type.equalsType(_typeInfoDecimal)) {
return Decimal.from(value) as T?;
} else if (type.equalsType(_typeInfoDynamicInt)) {
return DynamicInt.from(value) as T?;
}
var tType = TypeInfo.from(T);
var valueType = value != null ? TypeInfo.from(value) : null;
if (type.equalsTypeOrEntityType(valueType) &&
value is T &&
(!tType.isAnyType && type.equalsType(tType) && !type.hasArguments)) {
return value;
}
final resolutionRulesResolved =
resolveEntityResolutionRules(resolutionRules);
if (type.equalsType(_typeInfoUint8List)) {
return _resolveValueAsUInt8List(value, resolutionRulesResolved) as T?;
}
entityCache ??= JsonEntityCacheSimple();
if (value is String &&
(type.isListEntity || type.isEntityReferenceListType) &&
_regExpStringList.hasMatch(value)) {
var list = TypeParser.parseList(value);
if (list != null) {
value = list;
}
}
if (value is List<Object?>) {
return _resolveListByType<T>(
type,
value,
entityProvider,
entityHandlerProvider,
entityRepositoryProvider,
entityCache,
resolutionRulesResolved);
} else if (value is Map<String, Object?>) {
return _resolveMapByType<T>(
type,
value,
entityProvider,
entityHandlerProvider,
entityRepositoryProvider,
entityCache,
resolutionRulesResolved);
} else {
return _resolveEntityByType<T>(
type,
value,
entityProvider,
entityHandlerProvider,
entityRepositoryProvider,
entityCache,
resolutionRulesResolved);
}
}