Flutter 如何在dart中创建所需的超级构造函数

Flutter 如何在dart中创建所需的超级构造函数,flutter,dart,Flutter,Dart,我希望IDE通知我,我需要在继承的小部件的构造函数中构造超级构造函数。比如说,如果我有下面这样的抽象类 抽象类基类{ 最后的字符串名; 基类({ @必需的字符串名称, }):this.name=名称; } 我希望子类知道我需要实现超级构造函数。下面的代码在运行时抛出,但是如何确保它在构建时抛出,或者在构建之前IDE让我知道 class子类扩展基类{} 步骤1: abstract class BaseClass { final String name; BaseClass( S

我希望IDE通知我,我需要在继承的小部件的构造函数中构造超级构造函数。比如说,如果我有下面这样的抽象类

抽象类基类{
最后的字符串名;
基类({
@必需的字符串名称,
}):this.name=名称;
}
我希望子类知道我需要实现超级构造函数。下面的代码在运行时抛出,但是如何确保它在构建时抛出,或者在构建之前IDE让我知道

class子类扩展基类{}
步骤1:

abstract class BaseClass {
  final String name;

  BaseClass(
    String name,
  ) : this.name = name;
}

class ChildClass extends BaseClass{
  ChildClass() {}
}
您将从IDE收到警告:

超类“基类”没有零参数构造函数

这意味着您需要在子类的构造函数中调用超类的构造函数。

void main() {
 var child =  ChildClass();
  print('Name : ${child.getName}');
}
步骤2:

class ChildClass extends BaseClass{
  ChildClass() : super('Shubham');
  
  get getName => name;
}
现在我们可以通过创建
ChildClass

void main() {
 var child =  ChildClass();
  print('Name : ${child.getName}');
}
输出:

舒巴姆

如文件所述

构造函数不是继承的

子类不从其超类继承构造函数。声明没有构造函数的子类只有默认(没有参数,没有名称)构造函数

因此,您必须调用超级构造函数才能获得构建时警告

class ChildClass extends BaseClass{
  ChildClass() : super(); // This will give you 'The parameter 'name' is required.'
}
但是,要在尝试实例化时获得警告,您仍然需要添加另一个必需的注释

class ChildClass extends BaseClass{
  ChildClass({@required name}) : super(name: name);
}

如果派生类忽略显式调用基类构造函数,则它将使用零参数隐式调用基类的默认(未命名)构造函数。因此,您有几个选项可以获得生成时警告:

  • 不要给基类一个未命名的构造函数。将所有基类构造函数命名为
  • 使未命名的基类构造函数使用一个或多个必需的位置参数
  • 使未命名基类构造函数使用一个或多个必需的命名参数。这需要启用Dart的空安全功能,并使用新的
    required
    关键字,而不是
    package:meta
    @required
    注释