invokeSetter method
Invokes a setter and returns the result. The setter may be either
the implicit setter for a non-final field, or a user-defined setter
method. The name of the setter can include the final =; if it is
not present, it will be added.
Let o be the object reflected by this mirror, let
f be the simple name of the getter denoted by fieldName,
and let a be the object bound to value.
Then this method will perform the setter invocation
o.f = a
in a scope that has access to the private members
of o (if o is a class or library) or the private members of the
class of o (otherwise).
If the invocation returns a result r, this method returns
the result r.
If the invocation causes a compilation error
the effect is the same as if a non-reflective compilation error
had been encountered.
If the invocation throws an exception e (that it does not catch)
this method throws e.
Note that the return type of the corresponding method in dart:mirrors is InstanceMirror.
Required capabilities: invokeSetter on an instance mirror requires a matching InstanceInvokeCapability or InstanceInvokeMetaCapability; invokeSetter on a class mirror requires a matching StaticInvokeCapability or StaticInvokeMetaCapability; and invokeSetter on a top-level function requires a matching TopLevelInvokeCapability or TopLevelInvokeMetaCapability.
Implementation
@override
Object? invokeSetter(String name, Object? value) {
String setterName = _isSetterName(name)
? name
: _getterNameToSetterName(name);
StaticSetter? setter = _setters[setterName];
if (setter == null) {
throw reflectionNoSuchSetterError(reflectedType, setterName, [
value,
], {});
}
return setter(value);
}