toClass<T> method
Ff the class being implemented requires arugemts, (positional or named) pass the (default)values as positionalArguments
and or namedArguments
Implementation
T toClass<T>(
{List? positionalArguments, Map<Symbol, dynamic>? namedArguments}) {
// creates an instance of the give class
final InstanceMirror im = reflect(Activator.createInstance(
T, const Symbol(''), positionalArguments, namedArguments) as T?);
// converts the map to the given class
T process(InstanceMirror instanceMirror, Map? obj) {
final ClassMirror _classMirror = instanceMirror.type;
void processClassMirror(InstanceMirror instanceMirror,
ClassMirror classMirror, Map? _object) {
classMirror.declarations.values.forEach((item) {
final String name = MirrorSystem.getName(item.simpleName);
if (item is VariableMirror) {
dynamic _value;
_value = (_object ?? {})[name];
try {
if (item.type.reflectedType == double) {
instanceMirror.setField(item.simpleName,
_value == null ? null : double.parse(_value.toString()));
} else if (item.type.reflectedType == int) {
instanceMirror.setField(item.simpleName,
_value == null ? null : int.parse(_value.toString()));
} else {
instanceMirror.setField(item.simpleName, _value);
}
} catch (e) {
rethrow;
}
}
});
}
processClassMirror(instanceMirror, _classMirror, obj);
return instanceMirror.reflectee;
}
try {
return process(im, this);
} catch (e) {
rethrow;
}
}