4

我对 Flutter 和 Dart 还很陌生,我在理解如何重写扩展 Equatable 更新版本的类时遇到了一些麻烦。

这适用于 Equatable 0.4.0:

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

但是,更新到 Equatable 1.0.2 会在以下位置引发错误super(properties)

位置参数太多:预期为 0,但找到了 1。

尝试删除额外的参数。

我不明白如何properties使用 Equatable 1.0.2 传递给超级构造函数

4

2 回答 2

3

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

import 'package:equatable/equatable.dart';

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

起亚卡哈,

迈克·史密斯

于 2021-05-11T21:44:07.477 回答
2

官方 Equatable 文档描述了如何将比较属性暴露给超类。实际上,您根本不需要在构造函数中调用 super 。相反,您将使用如下代码(不是我的代码,取自文档):

class Person extends Equatable {
  final String name;

  Person(this.name);

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

这里的关键是覆盖 props getter。equatable 超类依靠propsgetter 中的属性来发挥它的魔力。

所有 equatable 所做的就是覆盖==类中的运算符。有一篇优秀的中篇文章介绍了一些您可能会发现有用的常见运算符覆盖

于 2020-01-16T15:39:09.870 回答