Flutterで16進数のカラー文字列を使用するにはどうすればいいですか? 質問する

Flutterで16進数のカラー文字列を使用するにはどうすればいいですか? 質問する

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.0extensionColor16 進数のカラー文字列を使用してオブジェクトを作成できるクラスの場合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で宣言することもできますが、メソッドには拡張子が役立ち、暗黙的に使用できます。次に例を示します。mixinclassHexColortoHex

void main() {
  final Color color = HexColor.fromHex('#aabbcc');

  print(color.toHex());
  print(const Color(0xffaabbcc).toHex());
}

16進文字列を使用することの欠点

ここでの他の回答の多くは、Color私が上で行ったように、16 進文字列から を動的に作成する方法を示しています。ただし、これを行うと、色を にすることはできませんconst
理想的には、この回答の最初の部分で説明した方法で色を割り当てます。これは、色を頻繁にインスタンス化する場合により効率的であり、これは通常 Flutter ウィジェットに当てはまります。

おすすめ記事