首页 > 解决方案 > Dart Flutter:为什么 Stream Sink 使用 getter 而不是 setter?

问题描述

根据我的基本理解,Stream我们sink将数据添加到接收器以将其传递给流,但要添加它,我们使用 getter 而不是 setter,我觉得这违反直觉(请参见下面的示例),请您用简单的话解释一下为什么它是这样,而不是相反?

例子:

class BlogPostViewModel {
  StreamController<List<BlogPost>> _blogPostListController = StreamController.broadcast();
  Stream<List<BlogPost>> get outBlogPostList => _blogPostListController.stream;
  Sink<List<BlogPost>> get _inBlogPostList => _blogPostListController.sink; // Here why use get and not a setter?
}

提前谢谢你。

标签: dartstreamsink

解决方案


getterandsetter概念是一种模拟对类中字段的访问但控制其行为的方法。因此,如果我们想要例如有一个每次从某个地方获取一些数据的getter(请不要这样做),那么在幕后甚至可能没有任何变量。

get因此set,当我们尝试获取和设置该字段的值时调用的方法:

class MyClass {
  void get test => print('You called get');
  set test(void input) => print('You called set');
}

void main() {
  final obj = MyClass();
  obj.test;         // You called get
  obj.test = null;  // You called set
}

因此,在您的情况下,您希望这样当您尝试获取命名的“变量”时,_inBlogPostList您将获得_blogPostListController.sink.

这样做的好处是您可以获得一个Sink可以调用add的实例close。如果您不需要close水槽,您可以使用setRémi Rousselet 建议的方法将东西添加到水槽中。


推荐阅读