findKeyType<K> method
Finds the key type of a map-like class.
Type Parameters:
K
: The expected key type.
Parameters:
parentClass
: The class representing the map.key
: The runtime Type to help narrow the match (optional).
Returns:
- A Class<K> representing the key type, or
null
if none exists.
Example
final mapClass = await loader.loadClass<Map<String, int>>('dart:core/map.dart.Map');
final stringType = loader.findKeyType<String>(mapClass);
print(stringType?.qualifiedName); // "dart:core/string.dart.String"
Implementation
@override
Class<K>? findKeyType<K>(Class parentClass, Type? key) {
_checkClosed();
final cacheKey = "${_buildCacheKey(parentClass)}:${key ?? ""}:classKey";
// Check cache first
final cached = _classKeyCache[cacheKey];
if (cached != null) {
_hitCount++;
return cached as Class<K>;
}
_missCount++;
key ??= extractKeyType(parentClass);
Class<K>? result;
if (key == null) {
result = _extractKeyTypeFromName<K>(parentClass);
} else if(key.toString().contains("dynamic") && !parentClass.getName().contains("dynamic")) {
result = _extractKeyTypeFromName<K>(parentClass);
} else {
result = Class.forType<K>(key as K, parentClass.getProtectionDomain());
}
// Cache result
if(result != null) {
_classKeyCache[cacheKey] = result;
}
return result;
}