Flutter-颜色名称字符串为材料颜色

时间:2019-03-06 16:58:29

标签: flutter

在Flutter中,有一种方法可以从其名称生成材质颜色,而无需创建完整的地图Map<String,MaterialColor>

理论上是这样的:

String colorName = "deepOrange";
MaterialColor color = Colors(colorName);

2 个答案:

答案 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);

希望对您有帮助