setProperty static method

void setProperty(
  1. dynamic obj,
  2. String name,
  3. dynamic value
)

Sets value of object property specified by its name.

The object can be a user defined object, map or array. The property name correspondently must be object property, map key or array index.

If the property does not exist or introspection fails this method doesn't do anything and doesn't any throw errors.

  • obj an object to write property to.
  • name a name of the property to set.
  • value a new value for the property to set.

Implementation

static void setProperty(obj, String name, value) {
  if (obj == null) throw Exception('Object cannot be null');
  // if (name == null) throw Exception('Property name cannot be null');

  if (obj is IValueWrapper) obj = obj.innerValue();

  if (obj is Map) {
    try {
      var targetKey = name.toLowerCase();
      var foundKey;
      for (var key in obj.keys) {
        if (key.toString().toString() == targetKey) {
          foundKey = key;
          break;
        }
      }
      foundKey = foundKey ?? name;
      obj[foundKey] = value;
    } catch (e) {
      // Ignore exceptions
    }
  } else if (obj is List) {
    try {
      var index = IntegerConverter.toNullableInteger(name) ?? 0;
      var listLength = obj.length - 1;
      if (index >= 0) {
        while (index > listLength) {
          obj.add(Object());
          listLength++;
        }
        obj[index] = value;
      }
    } catch (e) {
      // Ignore exceptions
    }
  } else {
    return PropertyReflector.setProperty(obj, name, value);
  }
}