Dart Flutter:为什么使用 getter 而不是 Stream Sink 的 setter?

Dart Flutter: Why use getter instead of setter for Stream Sink?

根据我对 Streamsink 的基本理解,我们将数据添加到接收器以便通过流传递它,但是要添加它我们使用 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?
}

提前谢谢。

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

因此,

getset 是我们尝试获取和设置此字段的值时调用的方法:

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 实例,您可以在该实例上调用 addclose。如果您不需要 close 水槽,您可以使用 set 方法将东西添加到水槽中,就像 Rémi Rousselet 建议的那样。