开发者

flutter Bloc add两次只响应一次问题解析

开发者 https://www.devze.com 2022-11-28 11:43 出处:网络 作者: 李小轰_Rex
目录问题描述原因分析处理方式问题描述连续调用两次addEvent,结果最终只能响应一次,第二次事件无法响应。@overrideStreamSomeStatemapEventToState(Som...
目录
  • 问题描述
  • 原因分析
  • 处理方式

问题描述

连续调用两次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,不响应本次状态变更。

flutter Bloc add两次只响应一次问题解析

处理方式

1. State实现copyWith()方法每个State类都要有copy()方法,用于产生state对象的副本;每次编辑 state 的字段内容,然后 yield 副本,保证每次 yield 的都是新的对象。

class SomeBloc extends Bloc<SomeEvent, SomeState>{
  SompythoneState _currentState;
  SomeBloc(SomeState initialState) : super(initialStawww.devze.comte){
    _currentState = initialState;
  }
  @overr编程ide
  Stream<SomeState> mapEventToState(SomeEvent event) async*{
    if(event is InCreaseEvent){
      _currentState.num ++;
      //每次 yield 新对象
      yield _currentState.copyWith();
    }
  }
}
class SomeState{
  int n开发者_自学开发um;
  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两次响应一次的资料请关注我们其它相关文章!

0

精彩评论

暂无评论...
验证码 换一张
取 消