我如何转换一个十六进制的颜色字符串像#b74093在扑动的颜色?
我想在Dart中使用HEX颜色代码。
我如何转换一个十六进制的颜色字符串像#b74093在扑动的颜色?
我想在Dart中使用HEX颜色代码。
当前回答
在文件中添加此函数
Color parseColor(String color) {
String hex = color.replaceAll("#", "");
if (hex.isEmpty) hex = "ffffff";
if (hex.length == 3) {
hex = '${hex.substring(0, 1)}${hex.substring(0, 1)}${hex.substring(1, 2)}${hex.substring(1, 2)}${hex.substring(2, 3)}${hex.substring(2, 3)}';
}
Color col = Color(int.parse(hex, radix: 16)).withOpacity(1.0);
return col;
}
然后像-一样使用它
Container(
color: parseColor("#b74093")
)
其他回答
我使用这个material_color_gen包,它的工作就像一个魅力
material_color_gen: ^2.0.0
使用:
import 'package:material_color_gen/material_color_gen.dart';
primarySwatch: Color(0xFFFF0000).toMaterialColor()
这是一个HexColor的例子:#ff0000 使用0xFF更改#的结果是:0xFFFF0000
官方链接: https://pub.dev/packages/material_color_gen
你可以写一个小的控制台工具来转换字符串:
import 'dart:convert';
import 'dart:io';
void main() {
while (true) {
var line = stdin.readLineSync(encoding: utf8);
print(HexColor.fromHex(line!));
}
}
class HexColor {
static fromHex(String hexString) {
final buffer = StringBuffer();
if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
buffer.write(hexString.replaceFirst('#', ''));
return int.parse(buffer.toString(), radix: 16);
}
}
Color类需要一个ARGB整数。由于您尝试将它与RGB值一起使用,请将其表示为int并以0xff作为前缀。
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
还有另一种解决方案。如果您将颜色存储为普通的十六进制字符串,并且不想为其添加不透明度(前导“FF”):
将十六进制字符串转换为int 要将十六进制字符串转换为整数,请执行以下操作之一: var myInt = int。解析(hexString,基数:16); 或 var myInt = int.parse("0x$hexString"); 作为0x(或-0x)的前缀将使int。将默认值解析为基数16。 通过代码添加不透明度到你的颜色 Color = new Color(myInt).withOpacity(1.0);
在fromRGB构造函数中使用十六进制数:
Color.fromRGBO(0xb7, 0x40, 0x93, 1),