Source
void observeArrayValue(PropertyPath name, Object value, Object old) {
final observe = _element._observe;
if (observe == null) return;
// we only care if there are registered side-effects
var callbacks = observe[name];
if (callbacks == null) return;
// if we are observing the previous value, stop
if (old is ObservableList) {
_observeLog.fine(() => '[$_name] observeArrayValue: unregister $name');
closeNamedObserver('${name}__array');
}
// if the new value is an array, begin observing it
if (value is ObservableList) {
_observeLog.fine(() => '[$_name] observeArrayValue: register $name');
var sub = value.listChanges.listen((changes) {
for (var callback in callbacks) {
smoke.invoke(this, callback, [changes], adjust: true);
}
});
registerNamedObserver('${name}__array', sub);
}
}