首页 > 解决方案 > 如何在 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
    }
  }
}

标签: flutteroopdartconstructor

解决方案


您可以使用重定向构造函数使一个构造函数利用另一个构造函数。在你的情况下,你会这样做:

  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);

推荐阅读