首页 > 解决方案 > BehaviorSubject 添加相同的值

问题描述

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

标签: flutterdartrxdart

解决方案


您正在寻找的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);
  }
}

推荐阅读