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

Yak*_*ako 8 super superclass dart equatable flutter

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

这适用于 Equatable 0.4.0:

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

但是,更新到 Equatable 1.0.2 会引发错误super(properties)

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

尝试删除额外的参数。

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

Mik*_*ith 7

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

import 'package:equatable/equatable.dart';

abstract class Failure extends Equatable {
  @override
  List<Object> get props => [];
}
Run Code Online (Sandbox Code Playgroud)

起亚卡哈,

迈克·史密斯


Spe*_*thy 5

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

class Person extends Equatable {
  final String name;

  Person(this.name);

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

这里的关键是重写 props getter。Equatable 超类依靠 getter 中的属性props来发挥其魔力。

所有 equalable 所做的都是覆盖==类中的运算符。有一篇优秀的媒体文章介绍了一些您可能会觉得有用的常见运算符覆盖