Flutter:从十六进制字符串创建常量颜色

Flutter: create const color from hex string

我正在使用 Firebase 远程配置来存储我的颜色值。这让我可以灵活地更新颜色,而无需更新我的应用程序。现在我给自己写了一个辅助函数,其中 returns 颜色对象。

在我的 Firebase 远程配置中,我将十六进制颜色代码存储为字符串。但是,现在我面临的问题是我的颜色不是常量 (const)。这对我来说是个大问题,因为我在一些构造函数中设置了默认颜色值,如下所示:

const CustomIcon(
    {required this.iconType,
    this.size,
    this.color = Helper.getColor("black"),
    Key? key})
    : super(key: key);

因为我的颜色不再是 const 值,所以我收到以下错误:https://dart.dev/tools/diagnostic-messages#non_constant_default_value

这是我的辅助函数:

static Color getColor(colorName) {
  final remoteConfig = FirebaseRemoteConfig.instance;

  String colorString = remoteConfig.getString(colorName);

  const color = Color(int.parse(colorString));

  return color;
}

你知道我该如何解决这个问题吗?

亲切的问候

遗憾的是,您将无法从 API 中构造任何内容。 const 关键字意味着 Dart 分析器甚至在编译之前就知道该值是什么。这里不是这种情况,因为值来自 API.

但是,您仍然可以找到解决方案,方法是使用本地 Color 默认值,并检查 null 颜色。

class CustomIcon extends StatelessWidget {
  final String iconType;
  final int? size;
  final Color? color;

  late final Color defaultColor = Helper.getColor("black");

  CustomIcon({required this.iconType, this.size, this.color, Key? key})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    final _color = color ?? defaultColor;
    // Build your Widget
    return Container(
      color: _color,
      height: 50,
      width: 50,
    );
  }
}

下面是一个简单的 DartPad,展示了它的实际效果:https://dartpad.dev/?id=562c943972abaefd29b7b264e16ad5aa