首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为equatable对象成员的equatable对象列表

作为equatable对象成员的equatable对象列表
EN

Stack Overflow用户
提问于 2020-08-09 02:46:14
回答 1查看 979关注 0票数 1

我目前正在关注resocoders clean architecture,他在其中强烈建议将Equatable用于将在未来进行比较的基本数据持有类。问题是我的类看起来像这样:

代码语言:javascript
复制
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。这个包的文档似乎也忽略了这个用例,只声明Equatable只适用于不可变类型。然而,我一点也不介意列表是不变的。

编辑:已完成示例。现在在手机上,不能马上测试。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-09 03:51:55

好吧,我的错误一定是在其他地方,在正确的MWE中使用列表似乎根本不是问题:

代码语言:javascript
复制
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

class Person extends Equatable {
  final String name;
  final List<AlterEgo> alterEgos;

  Person({@required this.name, @required this.alterEgos});

  @override
  List<Object> get props => [name, alterEgos];
}

class AlterEgo extends Equatable {
  final String name;
  final String superPower;

  AlterEgo({@required this.name, @required this.superPower});

  @override
  List<Object> get props => [name, superPower];
}

void main() {
  print(Person(name: "Clark", alterEgos: <AlterEgo>[
        AlterEgo(name: "Superman", superPower: "Flying"),
        AlterEgo(name: "Spiderman", superPower: "Climbing"),
      ]) ==
      Person(name: "Clark", alterEgos: <AlterEgo>[
        AlterEgo(name: "Superman", superPower: "Flying"),
        AlterEgo(name: "Spiderman", superPower: "Climbing"),
      ]));
  print(Person(name: "Clark", alterEgos: <AlterEgo>[
        AlterEgo(name: "Superman", superPower: "Flying"),
        AlterEgo(name: "Spiderman", superPower: "Climbing"),
      ]) ==
      Person(name: "Clark", alterEgos: <AlterEgo>[
        AlterEgo(name: "Superman", superPower: "Flying"),
      ]));
  print(Person(name: "Clark", alterEgos: <AlterEgo>[
        AlterEgo(name: "Superman", superPower: "Flying"),
        AlterEgo(name: "Spiderman", superPower: "Climbing"),
      ]) ==
      Person(name: "Clark", alterEgos: <AlterEgo>[
        AlterEgo(name: "Superman", superPower: "Flying"),
        AlterEgo(name: "Spiderman", superPower: "Jumping"),
      ]));
}

结果与预期一致:

代码语言:javascript
复制
true
false
false
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63319085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档