flutter Bloc add两次只响应一次问题解析
问题描述
连续调用两次addEvent,结果最终只能响应一次,第二次事件无法响应。
@override
Stream<SomeState> mapEventToState(SomeEvent event) async*{
if(event is InCreaseEvent){
state.num ++;
yield state;
}
}
someBloc.add(InCreaseEvent()); someBloc.add(InCreaseEvent());
原因分析
bloc 继承于 cubit , 查看 cubit 源码得知,状态更新时做了判断,如果接收到的 newState 与 currentState 为同一个对象,则直接 return,不响应本次状态变更。

处理方式
1. State实现copyWith()方法每个State类都要有copy()方法,用于产生state对象的副本;每次编辑 state 的字段内容,然后 yield 副本,保证每次 yield 的都是新的对象。
class SomeBloc extends Bloc<SomeEvent, SomeState>{
SomeState _currentState;
SomeBloc(SomeState initialState) : super(initialState){
_currentState = initialState;
}
@override
Stream<SomeState> mapEventToState(SomeEvent event) async*{
if(event is InCreaseEvent){
_currentState.num ++;
//每次 yield 新对象
yield _currentState.copyWith();
}
}
}
class SomeState{
int num;
SomeState(this.num);
///新加 copyWith 方法用于生成副本
SomeState copyWith(){
return SomeState(num);
}
}
abstract class SomeEvent{}
class InCreaseEvent extends SomeEvent{}
2.使用Equatable state继承Equatable重写get方法
以上就是flutter Bloc add两次只响应一次问题解析的详细内容,更多关于flutter Bloc add两次响应一次的资料请关注脚本之家其它相关文章!
相关文章
Android使用ViewDragHelper实现图片下拽返回示例
这篇文章主要介绍了Android使用ViewDragHelper实现图片下拽返回示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08
Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)
本篇文章介绍了Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo) ,有兴趣的同学可以了解一下。2016-11-11
详解Android自定义控件属性TypedArray以及attrs
这篇文章主要为大家介绍了android自定义控件属性TypedArray以及attrs,感兴趣的小伙伴们可以参考一下2016-01-01
Android开源项目PullToRefresh下拉刷新功能详解
这篇文章主要为大家详细介绍了Android开源项目PullToRefresh下拉刷新功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-09-09


最新评论