Comment convertir la chaîne (string) d'une couleur hexadécimale en objet Color dans Flutter ?
En utilisant la plateforme Flutter afin de créer une application mobile, vous devez utiliser un nouveau langage créé par les équipes de Google dans ce but : le langage Dart. Ce nouveau langage nécessite de devoir apprendre de nouveau certaines fonctionnalités qui lui sont propres. Pour utiliser des couleurs dans son interface, on se sert de la classe "Color". Par défaut, elle prend un entier comme paramètre. Il est quand même possible d'utiliser une couleur hexadécimale sous certaines conditions.
Dans d'autres langages, on peut utiliser effectivement une couleur à partir de son code hexadécimal. Il s'agit de la norme RGB. Cette norme n'est pas acceptée dans le langage Dart, qui lui préfère la norme ARGB. Cette norme accepte également un nombre au format hexadécimal, mais qui contient en premier la transparence. Si vous souhaitez lui passer une couleur non transparente, vous devez donc ajouter, devant la chaîne de caractères, "0xff" qui indique qu'il n'y a pas de transparence.
const couleur = const Color(0xff9575cd), //Cela fonctionne également avec des majuscules const couleur = const Color(0xFF9575CD),
Depuis sa version 2.7.0, le langage Dart a introduit un nouveau concept, les extensions. Elles permettent d'ajouter des méthodes supplémentaires à un type ou une classe utilisés dans Dart. On peut donc créer les méthodes statiques au sein d'une extension de la classe Color, pour accepter la norme RGB.
extension HexColor on Color { // Prend en charge la chaîne au format RGB pour la convertir en entier static Color fromHex(String hexString) { final buffer = StringBuffer(), if (hexString.length == 6 || hexString.length == 7) buffer.write('ff'), buffer.write(hexString.replaceFirst('#', '')), return Color(int.parse(buffer.toString(), radix: 16)), } // Méthode effectuant l'opération inverse (avec un paramètre indiquant si l'on souhaite préfixer d'un dièse) String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}' '${alpha.toRadixString(16).padLeft(2, '0')}' '${red.toRadixString(16).padLeft(2, '0')}' '${green.toRadixString(16).padLeft(2, '0')}' '${blue.toRadixString(16).padLeft(2, '0')}', } void main() { final Color couleur = HexColor.fromHex('#575cd'), print(couleur.toHex()), }