BehaviorSubject 添加相同的值

时间:2021-03-17 11:03:45

标签: flutter dart rxdart

嗨,我有一个简单类型 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);
  }
}

1 个答案:

答案 0 :(得分:1)

您要查找的是 distinct()BehaviorSubject() 方法。

从文档中看一下:

<块引用>

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

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

这里是你如何实现它:

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);
  }
}