我有这个模型类,我需要根据数据输入的不同条件构建不同的实例。下面是我目前解决方案的一个例子。
我想知道是否有任何方式我可以重用基础构造函数?
因为在实际情况中,基本构造函数要复杂得多,有很多条件。我必须多次复制和粘贴基本构造函数的参数。
或者我可以使用其他更简洁的模式?
代码示例:
class PersonModel {
int id;
String name;
int age;
String? job;
String? status
// how do I reuse this base constructor code on multiple named constructors?
PersonModel.base({
required this.id,
required this.name,
required this.age,
})
PersonModel.condition1({
required this.id,
required this.name,
required this.age,
required this.job,
})
PersonModel.condition2({
required this.id,
required this.name,
required this.age,
required this.job,
required this.status,
})
factory PersonModel.fromMap(Map<String, dynamic> data) {
int id = data["id"];
if (id <= 100) {
return PersonModel.base({}); // omit parameters for demonstration
} else if (id <=150) {
return PersonModel.condition1({}); // omit parameters for demonstration
} else {
return PersonModel.condition2({}); // omit parameters for demonstration
}
}
}
您可以通过使用重定向构造函数使一个构造函数利用另一个构造函数。在您的情况下,您可以这样做:
PersonModel.base({
required this.id,
required this.name,
required this.age,
});
PersonModel.condition1({
required int id,
required String name,
required int age,
required this.job,
}) : this.base(id: id, name: name, age: age);
PersonModel.condition2({
required int id,
required String name,
required int age,
required String? job,
required this.status,
}) : this.condition1(id: id, name: name, age: age, job: job);