最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

flutter?Bloc?add兩次只響應(yīng)一次問題解析

 更新時間:2022年11月14日 17:22:48   作者:李小轟_Rex  
這篇文章主要為大家介紹了flutter?Bloc?add兩次只響應(yīng)一次問題解析記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問題描述

連續(xù)調(diào)用兩次addEvent,結(jié)果最終只能響應(yīng)一次,第二次事件無法響應(yīng)。

@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,不響應(yīng)本次狀態(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兩次只響應(yīng)一次問題解析的詳細(xì)內(nèi)容,更多關(guān)于flutter Bloc add兩次響應(yīng)一次的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

都匀市| 苗栗市| 桃园市| 平谷区| 普安县| 迁安市| 会同县| 新晃| 任丘市| 绥棱县| 连州市| 渭南市| 黔南| 兴安盟| 集安市| 定南县| 莆田市| 长宁区| 鄂伦春自治旗| 东明县| 峡江县| 浦城县| 武川县| 两当县| 钟山县| 威海市| 公主岭市| 射洪县| 焦作市| 四子王旗| 托里县| 淮阳县| 通海县| 武城县| 盈江县| 星子县| 互助| 綦江县| 乌兰浩特市| 开鲁县| 永康市|