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
我正在使用 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