toClass<T> method

T toClass<T>(
  1. {List? positionalArguments,
  2. Map<Symbol, dynamic>? namedArguments}
)

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;
  }
}