我正在尝试初始化类中的一些事件流。我希望该流是最终流,但由StreamController
控制。我已经尝试了以下代码:
import "dart:async";
class Dog {
final StreamController _onBarkController;
final Stream onBark;
Dog() :
_onBarkController = new StreamController(),
onBark = _onBarkController.stream;
}
但此代码是非法的,因为在初始值设定项列表中禁止访问(甚至是隐式的)this
。
有什么办法可以做到这一点吗?
没有很好的方法来解决需要将某个对象销毁到多个最终字段的一般问题,这基本上就是您在这里尝试的。但好消息是,通常你并不真的需要。我推荐的两种方法是工厂构造函数和不保持派生状态。
工厂构造函数非常棒,因为您可以在调用真正的构造函数之前执行任意计算来创建参数,而真正的构造函数通常只能有一个初始值设定项列表。在这种情况下,您可以让工厂构造函数创建StreamController,并将其和流传递给私有构造函数。
不过,更好的做法是不要将Stream存储在字段中,因为您可以通过控制器访问它。我一直在用流做这件事:
class Dog {
final StreamController _onBarkController = new StreamController();
Stream get onBark => _onBarkController.stream;
}
onBark实际上是从_onBarkController派生的值,因此不需要存储它。