flutter?Bloc?add兩次只響應一次問題解析
問題描述
連續(xù)調(diào)用兩次addEvent,結(jié)果最終只能響應一次,第二次事件無法響應。
@override
Stream<SomeState> mapEventToState(SomeEvent event) async*{
if(event is InCreaseEvent){
state.num ++;
yield state;
}
}
someBloc.add(InCreaseEvent()); someBloc.add(InCreaseEvent());
原因分析
bloc 繼承于 cubit , 查看 cubit 源碼得知,狀態(tài)更新時做了判斷,如果接收到的 newState 與 currentState 為同一個對象,則直接 return,不響應本次狀態(tài)變更。

處理方式
1. State實現(xiàn)copyWith()方法每個State類都要有copy()方法,用于產(chǎn)生state對象的副本;每次編輯 state 的字段內(nèi)容,然后 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兩次只響應一次問題解析的詳細內(nèi)容,更多關(guān)于flutter Bloc add兩次響應一次的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
android中g(shù)zip數(shù)據(jù)壓縮與網(wǎng)絡(luò)框架解壓縮
這篇文章主要為大家介紹了android中g(shù)zip數(shù)據(jù)壓縮與網(wǎng)絡(luò)框架解壓縮實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Android使用ViewDragHelper實現(xiàn)圖片下拽返回示例
這篇文章主要介紹了Android使用ViewDragHelper實現(xiàn)圖片下拽返回示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧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
Android使用ViewPager實現(xiàn)翻頁效果
這篇文章主要為大家詳細介紹了Android使用ViewPager實現(xiàn)翻頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

