1

フラッター アプリ用に一連の BLoC を実装しましたが、その一部は機能します。このアプリは非常にシンプルで、プレイヤーがボタンを押すとゲームの状態が更新され、2 人のプレイヤー間の戦闘の状態が追跡されます。他の状態がありますが、これは機能していないビットであり、その理由がわかりません。

BattleState と呼ばれるキュビットを作成し、Equatable を拡張します。ゲーム内の 2 人のプレイヤーの現在の状態を持つオブジェクトとして、battleModel を持つ InBattle と呼ばれる状態があります。UI でボタンが押されると、battleModel が更新され、新しい InBattle 状態が新しい値で発行されます。

  final BattleModel battleModel;

  const InBattle(
      {this.battleModel});

  @override
  List<Object> get props =>
      [battleModel];
}

BattleModel はあなたが期待するものであり、いくつかの状態の詳細とそれらを更新するための関数が含まれており、equatable も実装しています

class BattleModel extends Equatable {

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

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

問題は、それが機能しないことです。ボタンを押して状態を変更しても、UI が更新されません。私はデバッガーを追跡しましたが、問題は、状態をチェックして更新する必要があるかどうかを確認したときに、電力値が変更されていても状態が同一であると判断したことでした。ホットリロードを実行すると、表示も適切に更新されたので、状態値が適切に更新されていることがわかります。

InBattle 状態から equatable を削除すると、すべてが期待どおりに更新されますが、状態が同じ場合にビルドをトリガーしたくないため、状態で Equatable が必要であると理解していました。このアプリケーションでは、それはあまり重要ではありません。状態は制限されており、状態変更の方法は十分に制限されているため、Equatable を削除してもアプリケーションは機能しますが、これは正しい実装方法ではないと理解しています。

Equatable を間違って使用していますか? それとも、InBattle 状態を 1 つだけ持つべきではなく、終了または勝利条件が発生するまで InBattle を何度も発行するのではなく、変更内容を反映する状態を実際に発行する必要があるという問題ですか?

4

1 に答える 1