dart - 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?
}
提前谢谢你。
解决方案
getter
andsetter
概念是一种模拟对类中字段的访问但控制其行为的方法。因此,如果我们想要例如有一个每次从某个地方获取一些数据的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 建议的方法将东西添加到水槽中。
推荐阅读
- dafny - 对数有 dafny 函数吗?
- reactjs - 在 React 中使用 iframe 实现 pdf.js 时如何使用 URL 显示 PDF
- optimization - 包括 SNOPT 和 Ipopt 在内的不同优化问题求解器的主要优势是什么?
- django-models - ModelForm 未将数据保存到数据库中
- html - 创建正确对齐的页脚
- reactjs - 我如何获取反应 js 对象中的信息
- node.js - typeorm 在不使用查询构建器 nodejs 的情况下进行相关搜索
- xcode - Xcode Instruments 错误:无法附加目标进程。无法为目标实例化加载器
- c# - 如何将单词或数字转换为字母或数字列表?
- apache-superset - 如何使通过 SQL 实验室创建的 CTAS 和 CVAS 表和视图自动刷新