如何将Flutter颜色转换为字符串并返回颜色

时间:2018-04-14 19:05:59

标签: dart flutter

我正在将颜色转换为字符串。然后我将Color转换为String。不幸的是,当我想将它转换回Color时,操作失败了:

   Color pickerColor = new Color(0xff443a49);
    String testingColorString = pickerColor.toString();

   Color newColor;

   newColor = testingColorString as Color;

type' String'不是类型'颜色'的子类型。在类型演员里面   字符串来自dart:core   颜色来自dart:ui

5 个答案:

答案 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) 返回颜色,返回与我们传入的值匹配的新颜色。