Dart初始化程序列表和最近填充的实例变量的访问权限

时间:2013-08-10 19:10:49

标签: dart

我正在尝试在类中初始化一些事件流。我希望该流是最终的,但由StreamController控制。我试过以下代码:

import "dart:async";

class Dog {
  final StreamController _onBarkController;
  final Stream onBark;

  Dog() :
    _onBarkController = new StreamController(),
    onBark = _onBarkController.stream;

}

但是这段代码是非法的,因为初始化列表中禁止访问{甚至是隐含的} this

有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

没有很好的方法可以解决需要将某个对象解构为多个最终字段的一般问题,这基本上就是你在这里尝试的。但好消息是,通常你并不需要。我建议的两种方法是工厂构造函数,而不是保持派生状态。

工厂构造函数非常棒,因为在调用实际构造函数之前,您可以执行任意计算来创建参数,而实际构造函数通常只有初始化列表。在这种情况下,您可以让工厂构造函数创建StreamController并将其传递给私有构造函数。

虽然对你来说更好,但是不能将Stream存储在一个字段中,因为你可以通过控制器访问它。我一直用流做这个:

class Dog {
  final StreamController _onBarkController = new StreamController();
  Stream get onBark => _onBarkController.stream;
}

onBark实际上是一个从_onBarkController派生的值,所以不需要存储它。