Flutter Equatable 类属性必须全部是最终的

Rua*_*uan 7 class dart flutter

我想知道这是否是我可以忽略的事情。

我扩展 Equatable 是为了比较对象,但扩展类要求我的属性是最终的(不可变的,我明白了)。但是,一旦我将其传递到小部件中,这就会阻止我编辑该对象。我可以删除final,它工作得很好,然后我可以将一个对象传递到一个小部件中,编辑它,然后将它传回(无需创建一百个变量)。

所以我的问题。这是可以接受的吗,Equatable 仍然有效吗?如果是的话,那就太好了,他们需要解决一些问题。如果不是,为什么不呢,我可以选择使用扩展 Equatable 的类传入和编辑对象吗?

错误:此类(或此类继承的类)被标记为“@immutable”,但其一个或多个实例字段不是最终的:

class PriceItem extends Equatable {
  final String key; // I removed the final here

  PriceItem({
    this.key,
  });

  @override
  List<Object> get props => [
        key,
      ];
}
Run Code Online (Sandbox Code Playgroud)

Net*_*Zaf 10

请参阅可等式文档:

注意:Equatable 被设计为仅适用于不可变对象,因此所有成员变量都必须是最终的(这不仅仅是 Equatable 的一个功能 - 用可变值覆盖 hashCode 可能会破坏基于哈希的集合)。

如果您考虑一下,就没有理由拥有两个具有相同键的可变对象,因为如果只有其中一个发生更改,那么它们具有可比键的事实就毫无意义。

您可以在 PriceItem 中定义一个方法,该方法接受另一个 PriceItem 并检查键是否相等。