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