我正在将颜色转换为字符串。然后我将Color转换为String。不幸的是,当我想将它转换回Color时,操作失败了:
Color pickerColor = new Color(0xff443a49);
String testingColorString = pickerColor.toString();
Color newColor;
newColor = testingColorString as Color;
type' String'不是类型'颜色'的子类型。在类型演员里面 字符串来自dart:core 颜色来自dart:ui
答案 0 :(得分:6)
在Dart中,as
运算符不允许您更改对象的实际结构,它只是允许您提供对象可能拥有更多内容的提示具体类型。例如,如果您有一只狗和一种动物类,您可以使用它来指定您的动物实际上是一只狗(只要对象 实际上是一只狗)。
class Animal {}
class Dog extends Animal {}
Animal animal = new Dog();
Dog bob = animal as Dog; // works, since animal is actually a dog
Animal animal2 = new Animal();
Dog bob2 = animal2 as Dog; // fails, since animal2 is actually an Animal
现在,在您提供toString
的示例中,实际上只创建了当前Color
值的字符串表示形式。由于此对象是字符串,因此您无法使用Color
将其更改回as
。相反,您可以将String解析为值并构造新的Color
对象。
Color color = new Color(0x12345678);
String colorString = color.toString(); // Color(0x12345678)
String valueString = colorString.split('(0x')[1].split(')')[0]; // kind of hacky..
int value = int.parse(valueString, radix: 16);
Color otherColor = new Color(value);
答案 1 :(得分:3)
利用Dart扩展程序的功能,我们可以使用返回 Color 的函数来增强 String :
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"));
}
}
}
在color属性中设置字符串颜色代码值。
child: Text("Text Color",
style: TextStyle(
color: '#55B9F4'.toColor(),
),
)
答案 2 :(得分:3)
使用以下代码获取颜色的十六进制值。
Color color = Colors.red;
var hexCode = '#${color.value.toRadixString(16).substring(2, 8)}';
答案 3 :(得分:1)
你实际上无法做到这一点。 Color没有一个构造函数接受String作为颜色的表示。
为此,您可以使用Color属性value。它是一个32位 int 值,代表您的颜色。您可以保存它,然后使用它来创建新的Color对象。
代码看起来像这样
Color pickerColor = new Color(0xff443a49);
int testingColorValue = pickerColor.value;
String testingColorString = pickerColor.toString();
Color newColor = new Color(testingColorValue);
或者像这样
Color pickerColor = new Color(0xff443a49);
String testingColorString = pickerColor.toString();
Color newColor = new Color(pickerColor.value);
答案 4 :(得分:0)
另一种在 firebase 中保存颜色并检索的简单方法是首先将颜色的值保存为 String 并将此值存储在 firebase 中,如下所示。
Color black = Colors.black; // example black color
String _storeColorValue = black.value.toString() ;
这将给出 4278190080 作为黑色值。您将此值作为字符串存储到 firebase。
您可以检索颜色值并将其更改回颜色,如下所示:
int value = int.parse(_storeColorValue);
Color color = Color(value).withOpacity(1);
这将借助颜色值和 withOpacity(1) 返回颜色,返回与我们传入的值匹配的新颜色。