flutter - 如何在 Dart 中的多个命名构造函数上重用构造函数?
问题描述
我有这个模型类,我需要根据数据输入的不同条件构建不同的实例。以下是我当前解决方案的示例。
我想知道我是否可以重用基本构造函数?
因为在实际情况下,基本构造函数要复杂得多,并且有很多条件。我必须多次复制和粘贴基本构造函数的参数。
还是我可以使用其他更清洁的模式?
代码示例:
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);
推荐阅读
- scala - 如何从火花数据框列scala的数组中获取所有元素
- c - 我的链表在第一次迭代后没有运行
- javascript - 如何通过反应“onchange”更改json键?
- android - 从 arraylist 调用 ACTION_CALL 意图
- angular - 在 Angular 6 中将异步代码转换为同步代码 - 使用 Async/Await 的返回类型约束
- android-studio - 找到多个文件,其独立于操作系统的路径为“maven.properties”
- c - 旋转肩部和肘部的 OpenGL 手臂
- c++ - clang 6 和 clang 7 的模板转换运算符区别
- java - 使用硬件的全部功能运行 Java 代码
- entity-framework - 带有 Microsoft Access 数据库的 Net Core 项目