2013-10-23 3 views
2

현재 getter xyz가 계산됩니다. 새 계산을 예약하려면 notifyProperty(this, #xyz);으로 전화하십시오.deprectaed notifyProperty를 바꾸는 방법은 무엇입니까?

최신 버전 에서을 관찰하면 notifyProperty은 더 이상 사용되지 않습니다. 어떻게 대체 할 수 있습니까? 설명서에 this.notifyPropertyChange(#xyz, oldValue, newValue);을 사용하는 것이 좋습니다. 문제는 getter가 계산 될 때 oldValue이없고 (직접적으로 newValue이 아님)

답변

4

suggestion from the devs은 참조 용으로 개인 변수에 oldValue을 계속 유지해야합니다. newValue에 대해서는 실제로 getter를 전달할 수 있으며 새 값으로 계산합니다.

이 유사한 클래스보고됩니다 목록을 처리 할 때

는 는 는
class MyElement extends Observable { 
    @observable var foo, bar; 
    var _oldValue; 
    @reflectable get xyz => foo + bar; 

    MyElement() { 
    // we use the xyz getter to compute its own new value 
    // notifyPropertyChange returns the new value for convenience :) 
    notifyXyz() { _oldValue = notifyPropertyChange(#xyz, _oldValue, xyz); } 
    onPropertyChange(this, #foo, notifyXyz); 
    onPropertyChange(this, #bar, notifyXyz); 
    } 
} 
+0

은 어떻게'oldValue' 주위 했을까? –

+1

notifyPropertyChange의 마지막 값으로 전달 된 값은 함수에서 반환됩니다. 변경된 색인 대신 전체 목록을 전달하면이 메소드를 계속 사용할 수 있습니다. 그러나'onPropertyChange'를 사용하는 대신에 다음을해야합니다 : myList.changes.listen ((_) {_oldValue = notifyPropertyChange (#xyz, _oldValue, xyz);});' –