Dart Multiple Constructors

Разве невозможно создать несколько конструкторов для класса в дротике?

в моем классе Player, если у меня есть этот конструктор

Player(String name, int color) {
    this._color = color;
    this._name = name;
}

Затем я пытаюсь добавить этот конструктор:

Player(Player another) {
    this._color = another.getColor();
    this._name = another.getName();
}

Я получаю следующую ошибку:

Конструктор по умолчанию уже определен.

Я не ищу обходного пути, создав один конструктор с кучей необязательных аргументов.

Есть ли хороший способ решить эту проблему?

Ответ 1

У вас может быть только один безымянный конструктор, но вы можете иметь любое количество дополнительных именованных конструкторов

class Player {
  Player(String name, int color) {
    this._color = color;
    this._name = name;
  }

  Player.fromPlayer(Player another) {
    this._color = another.getColor();
    this._name = another.getName();
  }  
}

new Player.fromPlayer(playerOne);

Этот конструктор может быть упрощен

  Player(String name, int color) {
    this._color = color;
    this._name = name;
  }

в

  Player(this._name, this._color);

Именованные конструкторы также могут быть приватными, начиная имя с _

class Player {
  Player._(this._name, this._color);

  Player._foo();
}

Конструкторы с final списком полей инициализатора необходимы:

class Player {
  final String name;
  final String color;

  Player(this.name, this.color);

  Player.fromPlayer(Player another) :
    color = another.color,
    name = another.name;
}

Ответ 2

Если ваш класс использует окончательные параметры, принятый ответ не будет работать. Это делает:

class Player {
  final String name;
  final String color;

  Player(this.name, this.color);

  Player.fromPlayer(Player another) :
    color = another.color,
    name = another.name;
}

Ответ 3

Если вы уже использовали конструктор с параметрами в проекте, и теперь вы выяснили, что вам нужен какой-либо конструктор по умолчанию no params, вы можете добавить пустой конструктор.

class User{
String name;

   User({this.name}); //This you already had before
   User.empty(); //Add this later 
}

Ответ 4

Как я могу использовать этот код с окончательными параметрами?

Как я могу использовать именованный конструктор с супер-конструкторами?