在Flutter中,有一种方法可以从其名称生成材质颜色,而无需创建完整的地图Map<String,MaterialColor>
。
理论上是这样的:
String colorName = "deepOrange";
MaterialColor color = Colors(colorName);
答案 0 :(得分:1)
根据注释,目的是保存并从shared_preferences中读取。在这种情况下,最好通过int值(而不是字符串名称)保存和检索颜色,以确保我们始终获得颜色。
prefs.setInt("prefered_color", Color.value)
Color c = const Color(prefs.getInt('prefered_color') ?? 0xFF42A5F5);
根据官方doc,目前没有API可以执行您描述的功能。尽管实施您的方法很容易,但我怀疑它在一般情况下是否有用。另外,我们还必须处理错别字或noSuchColor
错误。但是使用const
/ enum
将提供编译时错误检查的优势。
答案 1 :(得分:0)
我设法使用de做类似的事情 Colors.primaries列表(可在colors.dart文件中找到列表)=> click here:
//colors.dart
/// The material design primary color swatches, excluding grey.
static const List<MaterialColor> primaries = <MaterialColor>[
red,
pink,
purple,
deepPurple,
indigo,
blue,
lightBlue,
cyan,
teal,
green,
lightGreen,
lime,
yellow,
amber,
orange,
deepOrange,
brown,
// The grey swatch is intentionally omitted because when picking a color
// randomly from this list to colorize an application, picking grey suddenly
// makes the app look disabled.
blueGrey,
];
所以为了保存颜色:
Color colorToSave = Colors.indigo;
prefs.setInt("colorIndex", Colors.primaries.indexOf(colorToSave));
要检索:
MaterialColor colorSaved = Colors.primaries(getInt('colorIndex') ?? 0);
希望对您有帮助