Flutter:将RGB值转换为十六进制int

时间:2019-09-01 17:18:06

标签: flutter dart colors type-conversion hex

在Flutter中,我想将RGB颜色作为MaterialColor()构造函数中的int主色。如何将RGB值转换为十六进制整数格式为0xff ------?抱歉,这个简短的问题,我真的在任何地方都找不到!

2 个答案:

答案 0 :(得分:2)

您可以使用以下功能将RGB转换为十六进制,

int hexOfRGBA(int r,int g,int b,{double opacity=1}) 
    { 
          r = (r<0)?-r:r;
          g = (g<0)?-g:g;
          b = (b<0)?-b:b;
          opacity = (opacity<0)?-opacity:opacity;
          opacity = (opacity>1)?255:opacity*255;
          r = (r>255)?255:r;
          g = (g>255)?255:g;
          b = (b>255)?255:b;
          int a = opacity.toInt();
          return int.parse('0x${a.toRadixString(16)}${r.toRadixString(16)}${g.toRadixString(16)}${b.toRadixString(16)}');
    }

用法:

    Color(hexOfRGBA(0,0,0,opacity: 0.7)); 

但是出于某种原因,如果您想保持用例特定性,

  

您可以使用以下功能将RGB转换为十六进制(不   透明度)

int hexOfRGB(int r,int g,int b) 
    { 
      r = (r<0)?-r:r;
      g = (g<0)?-g:g;
      b = (b<0)?-b:b;
      r = (r>255)?255:r;
      g = (g>255)?255:g;
      b = (b>255)?255:b;
      return int.parse('0xff${r.toRadixString(16)}${g.toRadixString(16)}${b.toRadixString(16)}');
    }

用法:

Color(hexOfRGB(255,255,255)); 
  

如果您要强制添加透明度(即RGBA),

   int hexOfRGBA(int r,int g,int b,double opacity) 
        { 
         r = (r<0)?-r:r;
          g = (g<0)?-g:g;
          b = (b<0)?-b:b;
          opacity = (opacity<0)?-opacity:opacity;
          opacity = (opacity>1)?255:opacity*255;
          r = (r>255)?255:r;
          g = (g>255)?255:g;
          b = (b>255)?255:b;
          int a = opacity.toInt();
          return int.parse('0x${a.toRadixString(16)}${r.toRadixString(16)}${g.toRadixString(16)}${b.toRadixString(16)}');
        }

用法:

Color(hexOfRGBA(0,0,0,0.7)); 

答案 1 :(得分:0)

在Flutter中,Color类仅接受整数作为参数,或者可以使用命名构造函数fromARGB和fromRGBO。

因此,我们只需要将字符串#b74093转换为整数值。另外,我们需要尊重始终需要指定不透明度。 255(完全)不透明度由十六进制值FF表示。这已经给我们留下了0xFF。现在,我们只需要像这样添加颜色字符串即可:

最终颜色= const Color(0xffb74093);

可以选择是否将字母大写:

最终颜色=常量颜色(0xFFB74093);