一段时间以来,我一直在Flutter项目中使用RxDart。但是,我感到困惑的是,定义BehaviorSubject
既可以直接收听主题,也可以收听主题流。我真的无法指出区别。
示例:
BehaviorSubject<String> _mySubject = BehaviorSubject();
_mySubject.listen((value) => { print('Logging $value'} );
_mySubject.stream.listen((value) => { print('Logging $value'} );
此外,BehaviorSubjects似乎提供了两种方法来访问最后发出的值,从文档中,我看到了value
同步的getter。以及last
的getter返回Future
。
我再次感到困惑。如果什么都没发出,那么value
getter为什么不返回null?相反,它只是在等待。我发现的唯一解决方法是使用空值为主题播种。
最后,我尝试将last
getter用作Future,但它永远不会返回。是否有数据。在主题上调用它似乎永远都行不通。
编辑:
感谢@pskink指出stream
的getter返回Subject
本身,因此,我的前两个示例之间没有区别。
答案 0 :(得分:1)
value
如果尚未发出任何消息,则应返回null,不确定为什么它不适合您。您正在使用哪个版本的RxDart?
last
则有所不同。关闭Stream后,它将返回Stream的最后一个值。因此,您需要调用_mySubject.close();。那么Future将完成(只要Stream发出了任何值,否则将出现错误)。