Пакет observe
включает в себя обертку для отдельных наблюдаемых значений: ObservableBox
.
import 'package:observe/observe.dart';
import 'dart:async';
void main() {
ObservableBox myValue = new ObservableBox('hello');
myValue.changes.listen((List<ChangeRecord> records) {
PropertyChangeRecord record = records[0] as PropertyChangeRecord;
print('${record.field} changed, it is now ${myValue.value}');
});
new Timer.periodic(const Duration(seconds: 1), (t) {
myValue.value = new DateTime.now();
});
}
Там нет никакого способа наблюдать верхнего уровня или функции-Scope одну строку, логическое значение, INT, или дважды без использования ObservableBox.
Если строка, boolean, int или double является полем класса, вы можете использовать ObservableMixin
и аннотацию @observable
.
class Foo extends Object with ObservableMixin {
@observable String bar = '';
}
Затем вы можете получить уведомление о том, когда экземпляр Foo меняется:
foo.changes.listen((List<ChangeRecord> records) {
// ...
});
Оказывается, что в настоящее время (SDK 1.6) это имя, а не поле, а OldValue и новое_значение. Однако имя является символом, поэтому record.name == «myProperty» не будет оцениваться. Хмм. –
Итак, record.name == «myProperty» необходимо преобразовать в String с использованием зеркал. См. Мой ответ и код ниже. –