【发布时间】:2019-07-28 10:22:15
【问题描述】:
在 Flutter 中有一种方法可以根据其名称生成材质颜色,而无需创建完整的贴图 Map<String,MaterialColor>。
理论上是这样的:
String colorName = "deepOrange";
MaterialColor color = Colors(colorName);
【问题讨论】:
标签: flutter
在 Flutter 中有一种方法可以根据其名称生成材质颜色,而无需创建完整的贴图 Map<String,MaterialColor>。
理论上是这样的:
String colorName = "deepOrange";
MaterialColor color = Colors(colorName);
【问题讨论】:
标签: flutter
这是一个简单的方法。 假设您想获取 Colors.blue
的材质颜色你可以用这个来获取它:-
MaterialStateProperty.all(Colors.blue)
例如,要设置提升按钮的背景颜色,应提供材质颜色。您可以提供命名颜色,例如:-
ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.blue),
),
onPressed: (){},
child: Text('Press me'),
),
希望有所帮助。
【讨论】:
我设法使用
Colors.primaries 列表(在colors.dart file 中找到):
//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);
希望对你有所帮助。
【讨论】:
根据评论,目的是从shared_preferences中保存和读回。在这种情况下,最好通过 int 值而不是字符串名称来保存和检索颜色,以确保我们始终能够获取颜色。
prefs.setInt("prefered_color", Color.value)
Color c = const Color(prefs.getInt('prefered_color') ?? 0xFF42A5F5);
根据官方doc,目前没有API 可以执行您描述的功能。尽管实施您的方法很容易,但我怀疑它在一般情况下的用处。我们还必须处理拼写错误或noSuchColor 错误。但是使用const / enum 将提供编译时错误检查的优势。
【讨论】:
const / enum 地图。
Color.value 保存颜色并使用Color c = const Color(0xFF42A5F5); 重新创建颜色永远不会失败。