【问题标题】:Passing properties to the super constructor of Equatable将属性传递给 Equatable 的超级构造函数
【发布时间】:2020-05-03 10:43:22
【问题描述】:

我对 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 个。

尝试删除多余的参数。

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

【问题讨论】:

    标签: flutter dart super superclass equatable


    【解决方案1】:

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

    class Person extends Equatable {
      final String name;
    
      Person(this.name);
    
      @override
      List<Object> get props => [name];
    }
    

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

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

    【讨论】:

      【解决方案2】:

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

      import 'package:equatable/equatable.dart';
      
      abstract class Failure extends Equatable {
        @override
        List<Object> get props => [];
      }
      

      起亚卡哈,

      迈克·史密斯

      【讨论】:

        猜你喜欢
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        相关资源
        最近更新 更多