私は現在、resocoders clean Architectureに従っています。彼は、将来比較される基本的なデータ保持クラスにEquatableを使用することを強く推奨しています。問題は、私のクラスが次のようになることです。
class Person extends Equatable {
final String name;
final List<AlterEgo> alterEgos;
Person({@required name, @required alterEgos}):super([name, alterEgos]);
@override
List<Object> get props => [name, alterEgos];
}
class AlterEgo extends Equatable {
final String name;
final String superPower;
AlterEgo({@required name, @required superPower}):super([name, superPower]);
@override
List<Object> get props => [name, superPower];
}
void main(){
Person("Clark", <AlterEgo>[AlterEgo("Superman", "Flying")]) == Person("Clark", <AlterEgo>[AlterEgo("Superman", "Flying")]) //true
}
問題は、コンストラクターを作成すると、IDE がリストが比較できないと不平を言うことです。プリミティブ型から作成されたオブジェクトのリストを取得して同等に機能させるために、どの関数/クラスを定義する必要があるかについて、私はちょっと迷っています。パッケージのドキュメントでもこのユースケースが省略されているようで、Equatable は不変の型でのみ機能すると述べているだけです。ただし、リストが不変であることはまったく気にしません。
編集:完成した例。現在モバイルでは、すぐにテストできません。