Bonjour à tous,
je ne sais pas si le titre est bien formulé alors je vais détailler :
J’ai une classe abstraite abstract class ItemModel
, dans cette classe j’ai créer un constructeur nommé creator
:
ItemModel.creator(Map<String, dynamic> data) {
...
}
J’ai également dans cette classe plusieurs fonctions dont une en particulier getObject
:
T getObject<T extends ItemModel>(
String key,
T Function(Map<String, dynamic> data) creator,
) {
...
}
L’idée étant de créer des objets basés sur ma classe abstraite.
exemple :
class User extends ItemModel {
}
Je tiens à préciser que je n’ai pas de soucis de fonctionnement, mais j’aimerai optimiser 2 points qui sont liés.
Le premier est que j’aimerai faire disparaître le paramètre creator
de mon getObject
:
En reprenant mon exemple précédent actuellement pour utiliser getObject
je dois procéder de la manière suivante :
class User extends ItemModel {
// Déclaration obligatoire
User.creator(super.data) : super.creator();
UserRole get role =>
getObject(cols.role, (data) => UserRole.creator(data));
...
}
Et j’aimerai optimiser cela par :
class User extends ItemModel {
// Déclaration obligatoire
User.creator(super.data) : super.creator();
UserRole get role => getObject(cols.role);
...
}
Donc dans ma fonction getObject
il faudrait que je puisse créer un objet à partir de mon type générique :
T getObject<T extends ItemModel>(String key) {
return T.creator(...);
}
Sauf que ça ne fonctionne pas, j’ai pourtant bien déclaré T extends ItemModel
donc la classe T contient un constructeur créator.
Avez vous une idée ?
Le second point concerne le constructeur creator :
J’aimerai tout simplement ne plus être obligé de déclarer dans ma classe enfant le constructeur creator qui ne fait rien d’autre que d’appeler le constructeur parent.
class User extends ItemModel {
// Déclaration obligatoire que j'aimerai supprimer.
User.creator(super.data) : super.creator();
...
}