Как заменить устаревшее notifyProperty?

В настоящее время у меня есть геттер xyz, который вычисляется. Чтобы запланировать новое вычисление, я вызываю notifyProperty(this, #xyz);.

В последней версии observe notifyProperty устарело. Как я могу заменить его? Документация предлагает использовать this.notifyPropertyChange(#xyz, oldValue, newValue);. Проблема в том, что у меня нет oldValue (а не непосредственно newValue), так как вычисляется геттер.


person Fox32    schedule 23.10.2013    source источник


Ответы (1)


предложение разработчиков: сохраните oldValue в частной переменной для справки. Что касается newValue, вы можете просто передать геттер, и он вычислит его с новыми значениями.

Вы увидите класс, подобный этому:

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);
  }
}
person Matt B    schedule 23.10.2013
comment
Как бы вы сохранили oldValue при работе со списками? - person Marco Jakob; 28.10.2013
comment
Все, что передается в качестве последнего значения notifyPropertyChange, будет возвращено функцией. Если вы передаете полный список (вместо измененного индекса), вы можете продолжить этот метод. Но вместо использования onPropertyChange вам нужно будет сделать: myList.changes.listen((_) { _oldValue = notifyPropertyChange(#xyz, _oldValue, xyz); }); - person Matt B; 28.10.2013