データベースには、「#AABBCC」のようなString
として保存された色があるため、基本的に次のような関数を探しています:Color.parseColor("#AABBCC");
for Flutter
ColorクラスにはこのColor(0xFF42A5F5)
のようなものが必要なので、"#AABBCC"
から0xFFAABBCC
/// Construct a color from a hex code string, of the format #RRGGBB.
Color hexToColor(String code) {
return new Color(int.parse(code.substring(1, 7), radix: 16) + 0xFF000000);
}
単純な文字列置換は、正しい構文でそれを取得します。
String html_colour = '#AAABBCC';
String fixed_colour = html_colour.replace(new RegExp(r'#'), '0xFF');
それはそれを行う必要があります。
私はこのようにしてやった:
hexStringToHexInt(String hex) {
hex = hex.replaceFirst('#', '');
hex = hex.length == 6 ? 'ff' + hex : hex;
int val = int.parse(hex, radix: 16);
return val;
}
16進文字列をColorに変換するプロジェクトでこの関数を使用しています。
Color hexToColor(String hexString, {String alphaChannel = 'FF'}) {
return Color(int.parse(hexString.replaceFirst('#', '0x$alphaChannel')));
}
ここでの考え方は、アルファチャネルを渡すことができることに加えて、この関数にこの '#ffffff'のような16進文字列を渡すことができるということです。アルファチャネルは、色の不透明度を処理し、Colorに直接渡すことができます。
アルファチャネルについて、FF部分は0-100の16進表現です:
0 = 00 1 = 03 2 = 05 ... 9 = 17 ... 10 = 1A 11 = 1C 12 = 1F ... 99 = FC 100 = FF
#000000をColorに変換し、不透明度を0.1にしたいとします。この関数を次のように単純に呼び出すことができます。
hexToColor('#000000', alphaChannel: '1A');
そして、次のように呼び出すだけの場合:
hexToColor('#000000');
すると、不透明度が1の黒色のみが返されます。これが、不透明度と色の処理をもう少し進める方法を知りたい人に役立つことを願っています。