当前位置:  开发笔记 > 编程语言 > 正文

如何在Flutter中使用十六进制颜色字符串?

如何解决《如何在Flutter中使用十六进制颜色字符串?》经验,为你挑选了6个好方法。

如何转换一个十六进制颜色字符串#b74093一个Color在颤振?



1> creativecrea..:

在Flutter中,Color只接受整数作为参数,或者有可能使用命名的构造函数fromARGBfromRGBO.

所以我们只需要将字符串转换为#b74093整数值.此外,我们需要尊重始终需要指定不透明度.
255(完整)不透明度由十六进制值表示FF.这已经让我们失望了0xFF.现在,我们只需要添加这样的颜色字符串:

const color = const Color(0xffb74093); // Second `const` is optional in assignments.

这些字母可以选择是否大写:

const color = const Color(0xFFB74093);



2> Jossef Harus..:

Color班期望一个RGB整数.由于您尝试将其与0xff值一起使用,因此将其表示为int并为其添加前缀Color.

Color mainColor = Color(0xffb74093);

如果您对此感到恼火并仍希望使用字符串,则可以扩展Color并添加字符串构造函数

class HexColor extends Color {
  static int _getColorFromHex(String hexColor) {
    hexColor = hexColor.toUpperCase().replaceAll("#", "");
    if (hexColor.length == 6) {
      hexColor = "FF" + hexColor;
    }
    return int.parse(hexColor, radix: 16);
  }

  HexColor(final String hexColor) : super(_getColorFromHex(hexColor));
}

用法

Color color1 = HexColor("b74093");
Color color2 = HexColor("#b74093");
Color color3 = HexColor("#88b74093"); // if you wish to use ARGB format



3> 小智..:

0xff替换

如果您的颜色是#e41749,则它将为0xffe41749

color : Color(0xffe41749);



4> Rockvole..:

要将十六进制字符串转换为int,请执行以下操作:

int hexToInt(String hex)
{
  int val = 0;
  int len = hex.length;
  for (int i = 0; i < len; i++) {
    int hexDigit = hex.codeUnitAt(i);
    if (hexDigit >= 48 && hexDigit <= 57) {
      val += (hexDigit - 48) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 65 && hexDigit <= 70) {
      // A..F
      val += (hexDigit - 55) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 97 && hexDigit <= 102) {
      // a..f
      val += (hexDigit - 87) * (1 << (4 * (len - 1 - i)));
    } else {
      throw new FormatException("Invalid hexadecimal value");
    }
  }
  return val;
}

电话示例:

Color color=new Color(hexToInt("FFB74093"));



5> 小智..:

还有另一种解决方案.如果将颜色存储为普通十六进制字符串并且不想为其添加不透明度(前导FF):1)将十六进制字符串转换为int要将十六进制字符串转换为整数,请执行以下操作之一:

var myInt = int.parse(hexString, radix: 16);

要么

var myInt = int.parse("0x$hexString");

作为0x(或-0x)的前缀将使int.parse默认为16的基数.

2)通过代码为您的颜色添加不透明度

Color color = new Color(myInt).withOpacity(1.0);



6> Alvin Konda..:

一个不使用类的简单函数:

Color _colorFromHex(String hexColor) {
  hexColor = hexColor.replaceAll("#", "");
  return Color(int.parse('FF' + hexColor, radix: 16));
}

和使用

Color color1 = _colorFromHex("b74093");
Color color2 = _colorFromHex("#b74093");

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有