【问题标题】:Flutter convert Color to hex string颤振将颜色转换为十六进制字符串
【发布时间】:2019-08-04 11:11:36
【问题描述】:

如何将flutter Color 类实例转换为十六进制字符串?

例如,我想将 Colors.blue 转换为 '#4286f4'

Usecase 让用户选择一种颜色并将其作为十六进制颜色保存在数据库中。

我已经检查了相关问题,它们是用于转换的。

【问题讨论】:

  • 要获得没有不透明度的“HTML”颜色代码,请使用#${Colors.blue.value.toRadixString(16).substring(2)}
  • @Yann39 评论是一个简短而有用的答案。谢谢

标签: dart flutter


【解决方案1】:

在flutter中,如果AA是十六进制的alpha值,RR是十六进制的红色值,GG是十六进制的绿色值,BB是十六进制的蓝色值,则颜色可以表示为const Color(0xAARRGGBB) 只需删除前两个符号即可获得 HEX 值。 RRGGBB

【讨论】:

    【解决方案2】:

    虽然问题是将 Color 转换为 Hex,但如果你想存储和检索 Color 信息,我是这样使用的。

    将颜色数据保存为 int。 Colors.blue.value

    以 int 形式检索数据并将其传递给 Color 类 Color(savedInt)

    【讨论】:

      【解决方案3】:

      这是我正在使用的:

      extension ColorX on Color {
        String toHexTriplet() => '#${(value & 0xFFFFFF).toRadixString(16).padLeft(6, '0').toUpperCase()}';
      }
      

      示例输出:#00FFFF#FF69B4

      此代码还确保省略了 alpha (@bakua's comment)

      一些Flutter源码灵感:util.dart,painting.dart

      【讨论】:

        【解决方案4】:

        您可以向 Color 类添加扩展,以直接从 Color 对象本身获取 HexString

        extension HexColor on Color {
          /// 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')}';
        }
        
        Color color = Colors.blue ; 
        print(color.toHex());
        

        【讨论】:

          【解决方案5】:

          您可以使用int.toRadixString(16)value 属性(包括alpha)或单个redgreenblue 属性转换为十六进制:

           var myColor = Colors.blue;
           var hex = '#${myColor.value.toRadixString(16)}';
          

          【讨论】:

          • 谢谢甘特!只是错过了减去前 2 个字符以获得正确的 CSS 十六进制颜色。 String hexString = '#' + color.value.toRadixString(16).substring(2, hexString.length);
          • 或者将# 组合成红色、绿色和蓝色(但不是alpha)的十六进制值,而不是value
          • 当红色为 0 时,上面的代码无法生成正确的格式。例如,0x00ACC1 将转换为 #acc1。你应该使用'#${intColor.toRadixString(16).padLeft(6, '0')}'
          • 另外,如果您想始终省略 alpha,请先执行intColor = 0xFFFFFF & intColor
          猜你喜欢
          • 2012-11-24
          • 2012-11-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-27
          • 2011-05-29
          • 2011-04-06
          • 1970-01-01
          • 2017-06-10
          相关资源
          最近更新 更多