Dart Flutter:为什么使用 getter 而不是 Stream Sink 的 setter?
Dart Flutter: Why use getter instead of setter for Stream Sink?
根据我对 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?
}
提前谢谢。
getter
和 setter
概念是一种模拟访问 class 中的字段但控制其行为的方法。所以在幕后,如果我们想要,例如,甚至可以没有任何变量。有一个 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
水槽,您可以使用 set
方法将东西添加到水槽中,就像 Rémi Rousselet 建议的那样。
根据我对 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?
}
提前谢谢。
getter
和 setter
概念是一种模拟访问 class 中的字段但控制其行为的方法。所以在幕后,如果我们想要,例如,甚至可以没有任何变量。有一个 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
水槽,您可以使用 set
方法将东西添加到水槽中,就像 Rémi Rousselet 建议的那样。