重写抽象类 Dart 中的最终属性

dev*_*miu 4 oop abstract-class design-patterns dart flutter

我创建了一个抽象类,其中包含无状态小部件可以覆盖的方法和属性,但在实现该类之后,由于无状态小部件的不变性,我必须将小部件属性设置为最终属性,然后将抽象类属性也设置为最终属性。然后,我收到错误,必须初始化最终变量。

使用最终变量实现抽象类的正确方法是什么?

抽象类

abstract class BusinessCard {
  final CardView cardView;
  final CardInfo cardInfo;
  Widget front(BuildContext context);
  Widget back(BuildContext context);
}
Run Code Online (Sandbox Code Playgroud)

实施类

class Card1 extends StatelessWidget implements BusinessCard {
  final CardView cardView;
  final CardInfo cardInfo;

  Card1({
    @required this.cardView,
    @required this.cardInfo,
  });

  @override
  Widget build(BuildContext context) {
    return cardView == CardView.front ? front(context) : back(context);
  }

  @override
  Widget front(BuildContext context) {

  }

  @override
  Widget back(BuildContext context) {
    
  }
}
Run Code Online (Sandbox Code Playgroud)

jam*_*lin 12

  1. abstract不能自行构造,但它仍然可以具有派生类可以调用的构造函数。抽象基类中的构造函数可以初始化其final成员。

  2. 数据成员隐式地将 getter 和 setter 添加到接口。final成员隐式添加 getter,而不添加 setter。这意味着您的课程可能是:

    abstract class BusinessCard {
      CardView get cardView;
      CardInfo get cardInfo;
      Widget front(BuildContext context);
      Widget back(BuildContext context);
    }
    
    class Card1 extends StatelessWidget implements BusinessCard {
      @override
      final CardView cardView;
    
      @override
      final CardInfo cardInfo;
    
      Card1({
        required this.cardView,
        required this.cardInfo,
      });
      ...
    
    Run Code Online (Sandbox Code Playgroud)

    现在你的抽象类将是一个纯接口类,没有实现,也不存储数据。