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 发出了任何值,否则就会出错)。
我在我的 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 发出了任何值,否则就会出错)。