web-dev-qa-db-fra.com

Plusieurs constructeurs de fléchettes

Est-il vraiment impossible de créer plusieurs constructeurs pour une classe dans dart?

dans ma classe de joueur, si j'ai ce constructeur

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

Ensuite, j'essaie d'ajouter ce constructeur:

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

Je reçois l'erreur suivante: 

Le constructeur par défaut est déjà défini.

Je ne cherche pas une solution de contournement en créant un constructeur avec un tas d'arguments non requis. 

Y a-t-il un bon moyen de résoudre ce problème?

13
Tom Porat

Vous ne pouvez avoir qu'un seul unnamed _ ​​ constructeur , mais vous pouvez avoir un nombre quelconque de constructeurs _ { named]

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

Ce constructeur peut être simplifié

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

à

  Player(this._name, this._color);

Les constructeurs nommés peuvent aussi être privés en commençant le nom avec _ 

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

  Player._foo();
}
27

Si vous avez déjà utilisé un constructeur avec des paramètres dans le projet et que vous avez maintenant compris qu'il vous faut un constructeur sans paramètres par défaut, vous pouvez ajouter un constructeur vide.

class User{
String name;

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

Si votre classe utilise les paramètres finaux, la réponse acceptée ne fonctionnera pas. Cela fait:

class Player {
  final String name;
  final String color;

  Player(this.name, this.color);

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