如何用dart语言观察简单变量

gbl*_*zyk 7 dart dart-webui

我的问题是:如何观察像String或num这样的简单变量的变化?我知道你可以很容易地观察这样的物体:

observe(t, (e) => print ("Value changed"));
Run Code Online (Sandbox Code Playgroud)

但如何在简单变量上执行此操作?

Set*_*add 7

(此答案适用于 Polymer.dart。)

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();
  });
}
Run Code Online (Sandbox Code Playgroud)

如果不使用 ObservableBox,就无法观察顶级或函数范围的单字符串、布尔值、整数或双精度值。

如果 string、boolean、int 或 double 是类的字段,则可以使用ObservableMixin@observable注释。

class Foo extends Object with ObservableMixin {
  @observable String bar = '';
}
Run Code Online (Sandbox Code Playgroud)

然后,当 Foo 实例发生更改时,您可以收到通知:

foo.changes.listen((List<ChangeRecord> records) {
  // ...
});
Run Code Online (Sandbox Code Playgroud)