하나의  Class에 용도에 따라 여러 생성자를 만들 수 있다.

class User {
  String name;
  String nickname;
  int age;
  String job;

  User(this.name, this.nickname, this.age, this.job);

  // Named constructor
  User.other(Map<String, dynamic> user)
      : this.name = user["name"] as String,
        this.nickname = user["nickname"] as String,
        this.age = user["age"] as int,
        this.job = user["job"] as String;
}

void main() {
  User u = User('A', 'AA', 12, 'AAA');
  
  printUserInfo(u);

  Map<String, dynamic> userInfo = {
    "name": "Hong Gildong",
    "nickname": "Hong GD",
    "age": 23, 
    "job": "robber",
  };

  User u2 = User.other(userInfo);
  
  printUserInfo(u2);
}

void printUserInfo(User u)
{
  print("User's name is ${u.name}.");
  print("User's nickname is ${u.nickname}.");
  print("User's age is ${u.age}.");
  print("User's job is ${u.job}.");
  print("\n");
} 
User's name is A.
User's nickname is AA.
User's age is 12.
User's job is AAA.


User's name is Hong Gildong.
User's nickname is Hong GD.
User's age is 23.
User's job is robber.

 

Named constructor를 상속되지 않는다. 자식 Class에서 해당 생성자를 구현해야 한다.

class User {
  String name;
  String nickname;
  int age;
  String job;

  User(this.name, this.nickname, this.age, this.job);

  // Named constructor
  User.other(Map<String, dynamic> user)
      : this.name = user["name"] as String,
        this.nickname = user["nickname"] as String,
        this.age = user["age"] as int,
        this.job = user["job"] as String;
}

// Subclass
class SubUser extends User {

  SubUser(String name, String nickname, int age, String job) : super(name, nickname, age, job);
  
  SubUser.other(Map<String, dynamic> user) : super.other(user);
}

void main() {
  SubUser u = SubUser('A', 'AA', 12, 'AAA');
  
  printUserInfo(u);

  Map<String, dynamic> userInfo = {
    "name": "Hong Gildong",
    "nickname": "Hong GD",
    "age": 23, 
    "job": "robber",
  };

  SubUser u2 = SubUser.other(userInfo);
  
  printUserInfo(u2);
}

void printUserInfo(User u)
{
  print("User's name is ${u.name}.");
  print("User's nickname is ${u.nickname}.");
  print("User's age is ${u.age}.");
  print("User's job is ${u.job}.");
  print("\n");
} 
User's name is A.
User's nickname is AA.
User's age is 12.
User's job is AAA.


User's name is Hong Gildong.
User's nickname is Hong GD.
User's age is 23.
User's job is robber.

 

 

 

 

https://dart.dev/language/constructors#named-constructors