Flutter で のような16 進数のカラー文字列#b74093
を に変換するにはどうすればよいですかColor
?
Dart で HEX カラーコードを使用したいと思います。
ベストアンサー1
Flutterでは、Color
クラスパラメータとして整数のみを受け入れるか、名前付きコンストラクタを使用する可能性がありますfromARGB
そしてfromRGBO
。
したがって、文字列を#b74093
整数値に変換するだけで済みます。また、不透明度は常に指定する必要があることにも留意する必要があります。
255
(完全な)不透明度は 16 進数値 で表されますFF
。これで、 が残ります0xFF
。次に、次のように色の文字列を追加するだけです。
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
文字は大文字にするか小文字にするかを選択できます。
const color = const Color(0xFFB74093);
不透明度のパーセンテージ値を使用する場合は、最初の値を次FF
の値に置き換えることができます。このテーブル(他のカラー チャネルでも機能します)。
拡張クラス
Dartから始めると2.6.0
、extension
Color
16 進数のカラー文字列を使用してオブジェクトを作成できるクラスの場合Color
:
extension HexColor on Color {
/// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
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));
}
/// Prefixes a hash sign if [leadingHashSign] is set to `true` (default is `true`).
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')}';
}
メソッドを使用するには名前を明示的に指定する必要があるため、またはfromHex
で宣言することもできますが、メソッドには拡張子が役立ち、暗黙的に使用できます。次に例を示します。mixin
class
HexColor
toHex
void main() {
final Color color = HexColor.fromHex('#aabbcc');
print(color.toHex());
print(const Color(0xffaabbcc).toHex());
}
16進文字列を使用することの欠点
ここでの他の回答の多くは、Color
私が上で行ったように、16 進文字列から を動的に作成する方法を示しています。ただし、これを行うと、色を にすることはできませんconst
。
理想的には、この回答の最初の部分で説明した方法で色を割り当てます。これは、色を頻繁にインスタンス化する場合により効率的であり、これは通常 Flutter ウィジェットに当てはまります。