RxDart BehaviorSubject混淆

时间:2020-08-12 23:09:14

标签: flutter dart rxdart

一段时间以来,我一直在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本身,因此,我的前两个示例之间没有区别。

1 个答案:

答案 0 :(得分:1)

value如果尚未发出任何消息,则应返回null,不确定为什么它不适合您。您正在使用哪个版本的RxDart?

另一方面,

last则有所不同。关闭Stream后,它将返回Stream的最后一个值。因此,您需要调用_mySubject.close();。那么Future将完成(只要Stream发出了任何值,否则将出现错误)。