flutter_blocでEquatableクラスを使用する 質問する

flutter_blocでEquatableクラスを使用する 質問する

なぜ Equatable クラスを で使用する必要があるのでしょうかflutter_bloc? また、 props は何のために使用されるのでしょうか? 以下は、Flutter でブロック パターンを使用して状態を作成するためのサンプル コードです。

    abstract class LoginStates extends Equatable{}
    
    class LoginInitialState extends LoginStates{
      @override
      List<Object> get props => [];
    
    }

ベストアンサー1

データの比較には、 が必要ですEquatable。 は内部的に==と をオーバーライドしhashCode、定型コードを大幅に節約します。 では、この機能を使用するために クラスをBloc拡張する必要があります。EquatableStates and Events

 abstract class LoginStates extends Equatable{}

つまり、LoginStates重複した呼び出しは行われず、同じ状態が発生した場合にウィジェットが再構築されることはありません。

状態を定義する:

class LoginInitialState extends LoginStates {}

プロパティを使用して状態を定義します。

propsStatepropsリスト内で宣言された値と比較したいときに宣言します

class LoginData extends LoginStates {
  final bool status;
  final String userName;
  const LoginData({this.status, this.userName});
  @override
  List<Object> get props => [this.status, this.userName];
}

リストからユーザー名を削除し、 のようなリストを保持すると[this.status]、 はフィールドStateのみを考慮しstatususernameフィールド を避けます。これが、状態の変更を処理するために props を使用した理由です。

ブロックストリームの使用法:

これを拡張するとState with Equatable、古い状態データと新しい状態データの比較が行われます。例として、以下の例を見てみましょう。ここでは、LoginData はウィジェットを 1 回だけ構築し、重複する 2 回目の呼び出しを回避します。

@override
Stream<LoginStates> mapEventToState(MyEvent event) async* {
  yield LoginData(true, 'Hello User');
  yield LoginData(true, 'Hello User'); // This will be avoided
}

おすすめ記事