なぜ Equatable クラスを で使用する必要があるのでしょうかflutter_bloc
? また、 props は何のために使用されるのでしょうか? 以下は、Flutter でブロック パターンを使用して状態を作成するためのサンプル コードです。
abstract class LoginStates extends Equatable{}
class LoginInitialState extends LoginStates{
@override
List<Object> get props => [];
}
ベストアンサー1
データの比較には、 が必要ですEquatable
。 は内部的に==
と をオーバーライドしhashCode
、定型コードを大幅に節約します。 では、この機能を使用するために クラスをBloc
拡張する必要があります。Equatable
States and Events
abstract class LoginStates extends Equatable{}
つまり、LoginStates
重複した呼び出しは行われず、同じ状態が発生した場合にウィジェットが再構築されることはありません。
状態を定義する:
class LoginInitialState extends LoginStates {}
プロパティを使用して状態を定義します。
props
State
propsリスト内で宣言された値と比較したいときに宣言します
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
のみを考慮しstatus
、username
フィールド を避けます。これが、状態の変更を処理するために 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
}