svoid addWeakChangeListener(IHasChangeListeners src, A target, IVF1 action) { if (src == null || action == null || target == null) ret; var ref = weakRef(target); src.onChange(r { var target = ref!; if (target == null) var.removeChangeListener(this); else action.get(target); }); }