web-dev-qa-db-fra.com

Comment puis-je initialiser les données immuables d'un mixin dans Dart?

Je programmment en flutter en utilisant Dart 2.1.0 et rencontrez cette situation:

mixin Salt {
  final int pinches;  // Immutable, and I want to delay initialization.

  // Cannot declare constructors for mixin
}

class Meat with Salt {
  Meat(int pinches) ... // How to initialize it?
}

Salt n'a pas de constructeur, donc je ne peux pas utiliser la liste d'initialistes. pinches est final, donc je ne peux donc pas la définir dans Meat 'S' S.

Je ne veux pas faire Salt une classe parce que Meat peut avoir besoin de prolonger quelque chose d'autre.

Et je veux garder pinches immuable.

Toute façon de le faire? Merci d'avance.

17
Nick Lee

Semblable à la suggestion de Atdona, mais un peu plus près de ce que vous vouliez vraiment, vous pourriez le faire comme

mixin Salt {
  int _pinches;
  int get pinches => _pinches;
  void initSalt(int pinches) {
    assert(_pinches == null);
    _pinches = pinches;
  }
}

class Meat with Salt {
  Meat(int pinches) {
    initSalt(pinches);
  }
}

Ce n'est toujours pas strictement final, mais (tant que la mixin est dans une bibliothèque différente, vous ne pouvez donc pas changer directement le membre privé), il est immuable au moment de l'exécution. Pas aussi bon que si cela pourrait être correctement final, mais peut-être assez proche.

0
Raven Black