BehaviorSubject 添加相同的值
Posted
技术标签:
【中文标题】BehaviorSubject 添加相同的值【英文标题】:BehaviorSubject adding the same value 【发布时间】: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);
【问题讨论】:
【参考方案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<int>( stream: bloc.myStream.distinct((a, b) => a == b), builder: (context, snapshot) )
但是在 bloc 类的流中使用它更酷final myBeh = BehaviorSubject<int>(); Stream<int> get myStream => myBeh.stream.distinct((a, b) => a == b);
以上是关于BehaviorSubject 添加相同的值的主要内容,如果未能解决你的问题,请参考以下文章
使用 BehaviorSubject 的测试中的 TimeoutException - BLoC
node_modules 没有导出的成员 'BehaviorSubject'
优化算法蜂虎狩猎 (BEH) 算法含Matlab源码 2278期