如何使用 Null Safety 和 Instantiate 更新 Dart 的工厂构造函数?
How to Update a Factory constructor for Dart with Null Safety and Instantiate?
我有一个对我来说似乎很简单的问题;然而,我还是想不通。
我一直在通过一些过时的书籍学习 Dart。可以理解的是,我遇到了一个我无法解决的问题。我正在关注的书是 Alessandro Biessek(2019 年)在工厂构造部分下的 'Flutter for Beginners'。以下代码来自本书(第 48-49 页):
class Student extends Person {
Student(firstName, lastName) : super (firstName, lastName);
}
class Employee extends Person {
Employee(firstName, lastName) : super (firstName, lastName);
}
class Person {
String firstName;
String lastName;
Person([this.firstName, this.lastName]);
factory Person.fromType([PersonType type]){
switch(type){
case PersonType.employee:
return Employee();
case PersonType.student:
return Student();
}
return Person();
}
String getfullName() => '$firstName $lastName';
}
enum PersonType { student, employee}
我的问题:
- 如何更新此代码以使其成为 null 安全的?
- 如何实例化代码?我如何成为学生或员工?我这里脑子一片空白
- Factory 构造函数的使用频率是多少?
我尝试过的:
1a) 我试图设置参数 firstName 和 lastName = ''。
1b) 我还尝试从构造函数和工厂构造函数中删除 [] 。
2) 我不明白如何实例化一个工厂人。但是,我尝试了以下方法来实例化它:
void main() {
Person.fromType(PersonType.employee)
..firstName = 'Clark'
..lastName = 'Kent';
}
在DartPad中没有成功
如有任何帮助,我们将不胜感激。
由于您的 class 属性 可以是 null 您需要添加 ?.
您的代码中的另一个问题是 Student 和 Employee 有一个带有两个参数的构造函数,但在您的 factory Person.fromType
中您调用它时没有任何参数.
class Person {
String? firstName;
String? lastName;
Person([this.firstName, this.lastName]);
factory Person.fromType(Person person, [PersonType? type]){
switch(type){
case PersonType.employee:
return Employee(person.firstName, person.lastName);
case PersonType.student:
return Student(person.firstName, person.lastName);
default:
return person;
}
}
String getfullName() => '$firstName $lastName';
}
final Person person = Person('FirstName', 'LastName');
final Student student = Person.fromType(Person('WithoutLastName'), PersonType.student) as Student;
final Employee employee = Person.fromType(person, PersonType.employee) as Employee;
我有一个对我来说似乎很简单的问题;然而,我还是想不通。
我一直在通过一些过时的书籍学习 Dart。可以理解的是,我遇到了一个我无法解决的问题。我正在关注的书是 Alessandro Biessek(2019 年)在工厂构造部分下的 'Flutter for Beginners'。以下代码来自本书(第 48-49 页):
class Student extends Person {
Student(firstName, lastName) : super (firstName, lastName);
}
class Employee extends Person {
Employee(firstName, lastName) : super (firstName, lastName);
}
class Person {
String firstName;
String lastName;
Person([this.firstName, this.lastName]);
factory Person.fromType([PersonType type]){
switch(type){
case PersonType.employee:
return Employee();
case PersonType.student:
return Student();
}
return Person();
}
String getfullName() => '$firstName $lastName';
}
enum PersonType { student, employee}
我的问题:
- 如何更新此代码以使其成为 null 安全的?
- 如何实例化代码?我如何成为学生或员工?我这里脑子一片空白
- Factory 构造函数的使用频率是多少?
我尝试过的: 1a) 我试图设置参数 firstName 和 lastName = ''。 1b) 我还尝试从构造函数和工厂构造函数中删除 [] 。 2) 我不明白如何实例化一个工厂人。但是,我尝试了以下方法来实例化它:
void main() {
Person.fromType(PersonType.employee)
..firstName = 'Clark'
..lastName = 'Kent';
}
在DartPad中没有成功
如有任何帮助,我们将不胜感激。
由于您的 class 属性 可以是 null 您需要添加 ?.
您的代码中的另一个问题是 Student 和 Employee 有一个带有两个参数的构造函数,但在您的 factory Person.fromType
中您调用它时没有任何参数.
class Person {
String? firstName;
String? lastName;
Person([this.firstName, this.lastName]);
factory Person.fromType(Person person, [PersonType? type]){
switch(type){
case PersonType.employee:
return Employee(person.firstName, person.lastName);
case PersonType.student:
return Student(person.firstName, person.lastName);
default:
return person;
}
}
String getfullName() => '$firstName $lastName';
}
final Person person = Person('FirstName', 'LastName');
final Student student = Person.fromType(Person('WithoutLastName'), PersonType.student) as Student;
final Employee employee = Person.fromType(person, PersonType.employee) as Employee;