Flutter 我对Equatable和BloC有什么错?

Flutter 我对Equatable和BloC有什么错?,flutter,dart,state,bloc,equatable,Flutter,Dart,State,Bloc,Equatable,我已经为一个颤振应用程序实现了一系列BLoCs,其中一部分可以正常工作。该应用程序非常简单,它可以跟踪两名玩家之间的战斗状态,并在玩家按下按钮时更新游戏状态。还有其他的状态,但这一点不起作用,我不明白为什么 我创造了一个称为“战国”的立方体,它延伸到了“平衡”。有一个称为InBattle的状态,它以一个战斗模型作为对象,以游戏中两个玩家的当前状态为对象。当用户界面上的按钮被按下时,战斗模型被更新,然后一个新的战斗状态以新的值发出 final BattleModel battleModel;

我已经为一个颤振应用程序实现了一系列BLoCs,其中一部分可以正常工作。该应用程序非常简单,它可以跟踪两名玩家之间的战斗状态,并在玩家按下按钮时更新游戏状态。还有其他的状态,但这一点不起作用,我不明白为什么

我创造了一个称为“战国”的立方体,它延伸到了“平衡”。有一个称为InBattle的状态,它以一个战斗模型作为对象,以游戏中两个玩家的当前状态为对象。当用户界面上的按钮被按下时,战斗模型被更新,然后一个新的战斗状态以新的值发出

  final BattleModel battleModel;

  const InBattle(
      {this.battleModel});

  @override
  List<Object> get props =>
      [battleModel];
}
最终作战模型作战模型;
康斯坦因巴特勒(
{this.battleModel});
@凌驾
列表获取道具=>
[战斗模型];
}
战斗模型与您期望的差不多,它包含一些状态细节和一些更新它们的函数,并且它还实现了Equalable

class BattleModel extends Equatable {

  BattleModel(){
    this.p1Name = '';
    this.p2Name = '';
...

@override
  List<Object> get props => [p1Name, p2Name, p1InitialPower, p2InitialPower, p1CurrentPower, p2CurrentPower];
}

类作战模型扩展了Equalable{
作战模型(){
this.p1Name='';
this.p2Name='';
...
@凌驾
List get props=>[p1Name,p2Name,p1InitialPower,p2InitialPower,p1CurrentPower,p2CurrentPower];
}
问题是它不工作。我按下按钮更改状态,UI不更新。我跟踪了调试器,问题是当它检查状态以查看是否应该更新时,认为状态相同,即使电源值已更改。执行热重新加载也会导致显示update正确,因此我知道状态值正在正确更新

如果我从InBattle状态中删除Equalable,则所有内容都会完全按照预期更新,但我的理解是,您希望在状态上实现Equalable,因为您不希望在状态相同时触发构建。在这个应用程序中,这并不重要。状态是有限的,状态更改的方式也足够有限如果我放弃Equatable,应用程序确实可以工作,但我的理解是,这不是实现它的正确方法


我使用Equatable是错误的吗?如果是这样的话,如何使用?或者问题是我不应该只有一个InBattle状态,我真的应该发出反映更改内容的状态,而不是在退出或win条件发生之前反复发出InBattle的状态?

如果我的答案忽略了您的问题,很抱歉,但显然Equatable Package如果状态内容发生变化,ge应检测状态变化。 但作为一个快速、临时的解决方案-可能实施一个“过渡”状态-例如“战列状态更新状态”,并在新值写入“战列状态更新状态”之前发出它

请参见Cubit中的这个方法示例,从API中获取新鲜信息作为灵感:

Future<void> getUserInfo() async {
    emit(UserInfoLoading());
    try {
      final userInfo = await userInfoRepository.fetchUserInfo();
      if (userInfo != null) {
        emit(UserInfoLoaded(userInfo));
      }
    } on Exception {
      emit(UserInfoError('Problem loading userinfo'));
    }
  }
Future getUserInfo()异步{
emit(userinfoload());
试一试{
final userInfo=await userInfoRepository.fetchUserInfo();
如果(userInfo!=null){
发出(UserInfoLoaded(userInfo));
}
}例外{
emit(UserInfoError(“加载userinfo时出现问题”);
}
}

你能展示一下InBattle类吗?我需要检查一下这个类。你找到解决这个问题的方法了吗?我也有同样的问题