【问题标题】:RxDart BehaviorSubject confusionRxDart 行为主题混淆
【发布时间】:2020-12-02 18:03:17
【问题描述】:

我在 Flutter 项目中使用 RxDart 已经有一段时间了。但是,我发现定义 BehaviorSubject 可以直接收听主题以及主题的流,这让我感到困惑。我真的无法指出其中的区别。

示例:

BehaviorSubject<String> _mySubject = BehaviorSubject();

_mySubject.listen((value) => { print('Logging $value'} );
_mySubject.stream.listen((value) => { print('Logging $value'} );

此外,BehaviorSubjects 似乎提供了两种方法来访问最后发出的值,从文档中我看到了同步的 value getter。以及返回 Future 的 last getter。

我再一次感到困惑。如果没有发出任何内容,那么为什么 value getter 不返回 null?相反,它只是等待。我发现的唯一解决方法是使用 null 值作为主题。

最后,我尝试使用 last getter 作为 Future,但它永远不会返回。有没有数据。在主题上调用它似乎永远不会起作用。

编辑:

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

【问题讨论】:

标签: flutter dart rxdart


【解决方案1】:

value 如果还没有发出任何内容,则应该返回 null,不确定为什么它不适合您。你使用的是哪个版本的 RxDart?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多