I have a list of this model List<AnimeModel> animeModels=[];
AnimeModel animeModel=AnimeModel(id: "id", name: "name", image: "image");
after adding this model to the list when I do this it returns false why ?
if(animeModels.contains(animeModel)
CodePudding user response:
Does AnimeModel
properly implement ==
and hashCode
? My guess is that it does not and that's why. Unless you're initializing const
instances, Dart does object equality based on identity unless those methods are implemented.
CodePudding user response:
This snippet may help you understand your problem.
var animemodel = AnimeModel(id: "0", name: "One", image: "img");
var animemodel2 = AnimeModel(id: "2", name: "Two", image: "Img2");
var list = [animemodel, animemodel2];
print("${list.contains(animemodel)}"); //Will return True
var animemodel3 = AnimeModel(id: "0", name: "One", image: "img");
print("${list.contains(animemodel3)}"); //Will return False
If you want animemodel3 to return true
, you should override those two methods in your AnimeModel class :
bool operator ==(o) => o is AnimeModel && name == o.name && id == o.id;
int get hashCode => hash2(id.hashCode, name.hashCode);