【问题标题】:BehaviorSubject adding the same valueBehaviorSubject 添加相同的值
【发布时间】:2021-03-17 11:03:45
【问题描述】:

嗨,我有一个简单类型 int 的 BehaviorSubject,我将值 5 添加到它,然后添加另一个值 5。流侦听器向我发送了两个事件。 如果值等于最后一个值,如何强制检查值而不发送事件。 示例代码:

    class TestBloc {
  TestBloc(){
    testBehavior.stream.listen((event) {
      print('Event value = $event');
    });
    addValueToStream();
    addValueToStream();
  }

  final testBehavior = BehaviorSubject<int>();

  void addValueToStream() {
    testBehavior.add(5);
  }
}

【问题讨论】:

    标签: flutter dart rxdart


    【解决方案1】:

    你要找的是BehaviorSubject()distinct()方法。

    从文档中查看:

    如果数据事件等于前一个数据事件,则跳过它们。

    返回的流提供与此流相同的事件,除了 它永远不会提供两个相等的连续数据事件。 也就是说,错误被传递到返回的流中,并且数据 如果事件与最近的事件不同,则通过事件 发出数据事件。

    下面是你如何实现它:

    class TestBloc {
      TestBloc() {
        testBehavior.distinct((a, b) => a == b).listen((event) {
          print('Event value = $event');
        });
        addValueToStream();
        addValueToStream();
      }
    
      final testBehavior = BehaviorSubject<int>();
    
      void addValueToStream() {
        testBehavior.add(5);
      }
    }
    

    【讨论】:

    • 嗨,@Stewie Griffin。对我来说很奇怪,需要为流使用一些额外的功能来不将相同的值发送到流。但它工作正常,谢谢。也许有些人需要了解如何在 StreamBuilder 中使用它:StreamBuilder&lt;int&gt;( stream: bloc.myStream.distinct((a, b) =&gt; a == b), builder: (context, snapshot) {}) 但是在 bloc 类的流中使用它更酷final myBeh = BehaviorSubject&lt;int&gt;(); Stream&lt;int&gt; get myStream =&gt; myBeh.stream.distinct((a, b) =&gt; a == b);
    猜你喜欢
    • 2021-07-09
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多