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_RecyclerView实现上下滚动广告条实例(带图片)
本篇文章主要介绍了Android_RecyclerView实现上下滚动广告条实例(带图片),具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06android LinearLayout和RelativeLayout组合实现精确布局方法介绍
用android LinearLayout和RelativeLayout实现精确布局此方法适合很适合新人看2012-11-11APP添加CNZZ统计插件教程 Android版添加phonegap
这篇文章主要介绍了APP添加CNZZ统计插件教程,Android版添加phonegap,感兴趣的小伙伴们可以参考一下2015-12-12
最新评论