RxDart BehaviorSubject 混乱

RxDart BehaviorSubject confusion

我在我的 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,但它从来没有 returns。有没有数据。在主题上调用它似乎永远都行不通。

编辑:

感谢@pskink 指出 stream getter returns 和 Subject 本身,因此我的前两个示例之间没有区别。

如果尚未发出任何内容,

value 应该 return null,不确定为什么它对您不起作用。您使用的是哪个版本的 RxDart?

另一方面,

last 的工作方式有点不同。在 Stream 关​​闭后,它将 return Stream 的最后一个值。所以你需要调用 _mySubject.close();那么 Future 就会完成(只要 Stream 发出了任何值,否则就会出错)。