如何解决构建Dart对象的正确方法是什么?
我很难理解飞镖对象的结构。有人可以解释构造飞镖对象的正确方法吗?
在第一个代码段中,在初始化带有最终标记的变量之前调用构造函数。
class _VideoDescription extends StatelessWidget {
const _VideoDescription({
Key key,this.title,this.user,this.viewCount,}) : super(key: key);
final String title;
final String user;
final int viewCount;
...
}
在第二个片段中,当将变量初始化放置在构造函数之后并给其赋一个final类型时,我得到了一个错误。因此,这种结构。
class Category {
String imgUrl;
String name;
Category(name,imgUrl) {
this.imgUrl = imgUrl;
this.name = name;
}
}
另一件事,第一个代码段的构造函数结尾处的 : super(key: key);
有什么用?
解决方法
从文档中
默认情况下,子类中的构造函数会调用超类的未命名,无参数的构造函数。超类的构造函数在构造函数主体的开头被调用。如果还使用了初始化程序列表,它将在调用超类之前执行。总之,执行顺序如下:
- 初始化器列表
- 超类的无参数构造函数
- 主类的无参数构造函数
关于最终变量,您可以执行以下two方法:
class Category {
final String imgUrl;
final String name;
Category(this.imgUrl,this.name);
}
或:
class Category {
final String imgUrl;
final String name;
Category(imgUrl,name)
: imgUrl = imgUrl,name = name;
}
基本上,最终变量需要在构造函数主体执行之前初始化,因为最终变量不能更改。
关于super
,请检查以下内容:
void main() {
var students = Students(1,"peter");
print(students.name);
}
class Students extends Person {
final int id;
Students(id,age)
: id = id,super(age) {
print("I'm the constructor body");
}
}
class Person {
final String name;
Person(name) : name = name {
print("I'm the super constructor");
}
}
这将打印:
I'm the super constructor
I'm the constructor body
peter
在这里,由于您拥有最终变量,因此您需要创建一个初始化程序列表以初始化这些变量,并且由于Students
扩展了Person
,并且由于超类Person
没有-参数构造函数,则必须调用super(age)
。执行顺序与上面说明的相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。