将属性传递给 Equatable 的超级构造函数

Passing properties to the super constructor of Equatable

我是 Flutter 和 Dart 的新手,我在理解如何重写 class 扩展更新版本的 Equatable 时遇到了一些麻烦。

这适用于 Equatable 0.4.0:

abstract class Failure extends Equatable {
   Failure([List properties = const<dynamic>[]]) : super(properties);
}

但是,更新到 Equatable 1.0.2 会在 super(properties):

处引发错误

Too many positional arguments: 0 expected, but 1 found.

Try removing the extra arguments.

我不明白如何使用 Equatable 1.0.2

properties 传递给超级构造函数

The official Equatable docs 描述如何将您的比较属性公开给超级 class。实际上,您根本不需要在构造函数中调用 super。相反,您将使用如下代码(不是我的代码,取自文档):

class Person extends Equatable {
  final String name;

  Person(this.name);

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

这里的关键是覆盖道具getter。 equatable super class 寻找 props getter 中的属性来发挥它的魔力。

equatable 所做的只是覆盖 classes 中的 == 运算符。有一个excellent medium article that goes over some common operator overrides that you may find useful.

我参加派对可能有点晚了。但可以提出以下建议 - 您不需要将任何变量传递给 Equatable 超级构造函数。相反,您可以从 Failure class 中覆盖 Equatable 基 class 并将“props”分配给一个空数组。如果需要,任何继承 Failure 的 class 也可以“@override”道具。

import 'package:equatable/equatable.dart';

abstract class Failure extends Equatable {
  @override
  List<Object> get props => [];
}

起亚卡哈,

迈克·史密斯