objectToMap method

Map<String, dynamic> objectToMap(
  1. Type cls,
  2. dynamic object
)

Implementation

Map<String, dynamic> objectToMap(Type cls, dynamic object) {
  final om = reflect(object);
  final cm = reflectClass(cls);
  final map = <String, dynamic>{};
  cm.instanceMembers.forEach((Symbol key, MethodMirror value) {
    if (value.isSynthetic && value.isGetter) {
      final mapKey = nameUnderLine(symbolToName(key));
      if ([int, double, bool, String]
          .contains(value.returnType.reflectedType)) {
        map[mapKey] = om.getField(key).reflectee;
      } else {
        if (value.returnType.reflectedType.toString().startsWith('Map')) {
          map[mapKey] = om.getField(key).reflectee;
        } else {
          if (value.returnType.reflectedType.toString().startsWith('List')) {
            final list = om.getField(key).reflectee;
            final subcm = value.returnType.typeArguments.first;
            final listIns = [];
            (list as List).forEach((subObj) {
              listIns.add(objectToMap(subcm.reflectedType, subObj));
            });
            map[mapKey] = listIns;
          } else {
            final subObj = om.getField(key).reflectee;
            final subMap =
                objectToMap(value.returnType.reflectedType, subObj);
            map[mapKey] = subMap;
          }
        }
      }
    }
  });
  return map;
}