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

Posted

技术标签:

【中文标题】dart语言中如何观察简单变量【英文标题】:How to observe simple variable in dart language 【发布时间】:2013-09-03 06:21:57 【问题描述】:

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

observe(t, (e) => print ("Value changed"));

但是如何对简单变量执行此操作?

【问题讨论】:

【参考方案1】:

(此答案适用于 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();
  );

如果不使用 ObservableBox,就无法观察***或函数范围的单个字符串、布尔值、int 或 double。

如果 string、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 和 newValue。但是, name 是一个符号,因此 record.name == "myProperty" 不会评估。小时。 所以 record.name == "myProperty" 需要使用镜像转换为字符串。请参阅下面的答案和代码。【参考方案2】:

这里是一个字符串值绑定的例子,它是对象属性:

<!DOCTYPE html>

<html>
  <head>
    <title>index</title>
    <script src="packages/polymer/boot.js"></script>
  </head>

  <body>
    <template id="_template" bind>
      <input type="text" value="name">
      <p>The name is name</p>
    </template>

    <script type="application/dart" src="index.dart"></script>
  </body>
</html>
import 'dart:html';
import 'package:polymer/polymer.dart';

class Person extends Object with ObservableMixin 
  @observable
  String name;
  Person(this.name);


main() 
  query("#_template").model = new Person('Bob');

【讨论】:

以上是关于dart语言中如何观察简单变量的主要内容,如果未能解决你的问题,请参考以下文章

Flutter学习笔记·初识Dart语言

Flutter必备语言Dart教程01 - 变量,类型,函数

Dart语言特性必备了解!

Flutter必备语言Dart教程03 - 类,泛型

Dart语言:变量声明

Dart语言学习 Dart的常量和变量