Flutter 如何在flatter中使用十六进制颜色字符串?
如何在flatter中将十六进制颜色字符串(如Flutter 如何在flatter中使用十六进制颜色字符串?,flutter,dart,colors,hex,Flutter,Dart,Colors,Hex,如何在flatter中将十六进制颜色字符串(如#b74093转换为颜色 我想在Dart中使用十六进制颜色代码。在颤振中,只接受整数作为参数,或者可以使用命名构造函数和 因此,我们只需要将字符串#b74093转换为整数值。我们还需要尊重,不透明度始终需要指定。 255(完整)不透明度由十六进制值FF表示。这已经给我们留下了0xFF。现在,我们只需要像这样附加颜色字符串: const color = const Color(0xffb74093); // Second `const` is opti
#b74093
转换为颜色
我想在Dart中使用十六进制颜色代码。在颤振中,只接受整数作为参数,或者可以使用命名构造函数和
因此,我们只需要将字符串#b74093
转换为整数值。我们还需要尊重,不透明度始终需要指定。255
(完整)不透明度由十六进制值FF
表示。这已经给我们留下了0xFF
。现在,我们只需要像这样附加颜色字符串:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
HexToColor('#F2A03D')
Color color1 = _colorFromHex("b74093");
Color color2 = _colorFromHex("#b74093");
Text(
'Hello, World!',
style: TextStyle(backgroundColor: '#bfeb91'.toColor()), // Or 'bfeb91', or 'ffbfeb91'
),
字母可以选择是否大写:
const color = const Color(0xFFB74093);
对于允许您使用十六进制颜色字符串创建
Color
对象的Color
类:
extension HexColor on Color{
///字符串的格式为“aabbcc”或“ffaabbcc”,并带有可选的前导“#”。
来自hex的静态颜色(字符串hextstring){
final buffer=StringBuffer();
if(hexString.length==6 | | hexString.length==7)buffer.write('ff');
write(hexString.replaceFirst('#','');
返回颜色(int.parse(buffer.toString(),基数:16));
}
///如果[leadingHashSign]设置为'true'(默认值为'true'),则为哈希符号添加前缀。
字符串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
方法也可以在mixin
或class
中声明,因为HexColor
名称需要显式指定才能使用,但是扩展对toHex
方法很有用,可以隐式使用。以下是一个例子:
void main(){
最终颜色=HexColor.fromHex(“#aabbcc”);
打印(color.toHex());
打印(常量颜色(0xffaabbcc.toHex());
}
使用十六进制字符串的缺点
这里的许多其他答案显示了如何从十六进制字符串动态创建颜色
,就像我上面所做的那样。但是,这样做意味着颜色不能是常量
理想情况下,您可以按照我在回答的第一部分中解释的方式分配颜色,这在大量实例化颜色时更有效,这通常适用于颤振小部件。要将十六进制字符串转换为整数,请执行以下操作:
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;
}
“#b74093”
?好的
烹饪
int getColorHexFromStr(字符串colorStr)
{
colorStr=“FF”+colorStr;
colorStr=colorStr.replaceAll(“#”);
int-val=0;
int len=colorStr.length;
对于(int i=0;i 如果(hexDigit>=48&&hexDigit还有另一种解决方案。如果您将颜色存储为普通十六进制字符串,并且不想为其添加不透明度(前导“FF”):
将十六进制字符串转换为int
要将十六进制字符串转换为整数,请执行以下操作之一:
var myInt = int.parse(hexString, radix: 16);
或
因为前缀0x(或-0x)将使int.parse默认为基数16
通过代码为颜色添加不透明度
Color color = new Color(myInt).withOpacity(1.0);
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));
}
用法
导入新类并按如下方式使用:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
HexToColor('#F2A03D')
Color color1 = _colorFromHex("b74093");
Color color2 = _colorFromHex("#b74093");
Text(
'Hello, World!',
style: TextStyle(backgroundColor: '#bfeb91'.toColor()), // Or 'bfeb91', or 'ffbfeb91'
),
你们可以点击颜色小部件,它会告诉你们更深入的信息,这些字母代表什么
您还可以使用Color.fromARGB()方法创建自定义颜色,这对我来说要简单得多。使用网站为您的颤振应用程序选择您想要的任何颜色。在颤振中,要使用alpha从RGB创建颜色,请使用:
return new Container(
color: new Color.fromRGBO(0, 0, 0, 0.5),
);
如何使用十六进制颜色:
return new Container(
color: new Color(0xFF4286f4),
);
// 0xFF -> the opacity (FF for opaque)
// 4286f4 -> the hexadecimal color
不透明度的十六进制颜色:
return new Container(
color: new Color(0xFF4286f4).withOpacity(0.5),
);
//或更改“FF”值
100%FF
95%-F2
90%-E6
85%-D9
80%-CC
75%高炉
70%-B3
65%-A6
60% — 99
55%-8摄氏度
50% — 80
45% — 73
40% — 66
35% — 59
30%-4D
25% — 40
20% — 33
15% — 26
10%-1A
5%-0D
0% — 00
有关更多信息,请参阅官方文档页面。不使用类的简单函数:
Color _colorFromHex(String hexColor) {
final hexCode = hexColor.replaceAll('#', '');
return Color(int.parse('FF$hexCode', radix: 16));
}
您可以这样使用它:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
HexToColor('#F2A03D')
Color color1 = _colorFromHex("b74093");
Color color2 = _colorFromHex("#b74093");
Text(
'Hello, World!',
style: TextStyle(backgroundColor: '#bfeb91'.toColor()), // Or 'bfeb91', or 'ffbfeb91'
),
文件utils.dart
示例用法
简易方法:
String color = yourHexColor.replaceAll('#', '0xff');
用法:
Container(
color: Color(int.parse(color)),
)
将十六进制数与fromRGB构造函数一起使用:
Color.fromRGBO(0xb7, 0x40, 0x93, 1),
如果要使用格式为#123456的颜色的十六进制代码,则很容易做到。创建一个类型为color的变量,并为其指定以下值
Color myHexColor = Color(0xff123456)
// Here you notice I use the 0xff and that is the opacity or transparency
// of the color and you can also change these values.
使用myhexcolor,您就可以开始了
如果要直接从十六进制代码更改颜色的不透明度,请将0xff中的ff值更改为下表中的相应值
十六进制不透明度值
100%FF
95%-F2
90%-E6
85%-D9
80%-CC
75%高炉
70%-B3
65%-A6
60% — 99
55%-8摄氏度
50% — 80
45% — 73
40% — 66
35% — 59
30%-4D
25% — 40
20% — 33
15% — 26
10%-1A
5%-0D
0% — 00
供一般参考。有一种更简单的方法使用“超级增压”库。尽管您可以将扩展方法用于上述所有解决方案,但您可以找到实用的用户库工具包
"#ff00ff".toColor(); // Painless hex to color
"red".toColor(); // Supports all web color names
更容易,对吧
这是我的解决方案:
String hexString = "45a3df";
Color(int.parse("0xff${hexString}"));
这是唯一不需要额外步骤的方法。您可以使用该软件包从十六进制字符串中获取Color
。它支持三位和六位RGB十六进制表示法
Color=fromCSSColor('#ff00aa'))
乐观主义者
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")
)
Color getColorFromColorCode(String code){
return Color(int.parse(code.substring(1, 7), radix: 16) + 0xFF000000);
}
Color _getColorFromHex(String hexColor) {
hexColor = hexColor.replaceAll("#", "");
if (hexColor.length == 6) {
hexColor = "FF" + hexColor;
}
if (hexColor.length == 8) {
return Color(int.parse("0x$hexColor"));
}
}
Text(
'Hello, World!',
style: TextStyle(backgroundColor: _getColorFromHex('ff00aa')), // Or 'bfeb91', or 'ffbfeb91'
),
extension ColorExtension on String {
toColor() {
var hexColor = this.replaceAll("#", "");
if (hexColor.length == 6) {
hexColor = "FF" + hexColor;
}
if (hexColor.length == 8) {
return Color(int.parse("0x$hexColor"));
}
}
}
Text(
'Hello, World!',
style: TextStyle(backgroundColor: '#bfeb91'.toColor()), // Or 'bfeb91', or 'ffbfeb91'
),
Color colorFromHex(String hexColor) {
final hexCode = hexColor.replaceAll('#', '');
if (hexColor.length == 6) {
hexColor = 'FF' + hexColor; // FF as the opacity value if you don't add it.
}
return Color(int.parse('FF$hexCode', radix: 16));
}
Container(
color: colorFromHex('abcdff'),
child: Text(
'Never stop learning',
style: TextStyle(color: colorFromHex('bbffffcc')),
),
)
import 'package:supercharged/supercharged.dart';
"#ff00ff".toColor(); // Painless hex to color
"red".toColor(); // Supports all web color names
Container
(
color:Color(0xff000000)
)
colorToHexString(Color color) {
return '#FF${color.value.toRadixString(16).substring(2, 8)}';
}
hexStringToColor(String hexColor) {
hexColor = hexColor.toUpperCase().replaceAll("#", "");
if (hexColor.length == 6) {
hexColor = "FF" + hexColor;
}
return Color(int.parse(hexColor, radix: 16));
}
String hexCode = colorToHexString(Colors.green);
Color bgColor = hexStringToColor(hexCode);
print("$hexCode = $bgColor");