flutter中有一种方法可以从其名称中生成材料颜色,而无需创建完整的映射Map<String,MaterialColor>
。
从理论上讲,类似的东西:
String colorName = "deepOrange";
MaterialColor color = Colors(colorName);
根据评论,目的是保存并从shared_preferences读取。在这种情况下,最好通过int值而不是按字符串名称保存和检索颜色,以确保我们始终获得颜色。
- 保存:
prefs.setInt("prefered_color", Color.value)
- 检索:
Color c = const Color(prefs.getInt('prefered_color') ?? 0xFF42A5F5);
根据官方文档,目前尚无API执行您描述的功能。尽管很容易实施您的方法,但我怀疑它在一般情况下的有用性。另外,我们必须处理错别字或noSuchColor
错误。但是使用const
/enum
将提供编译时间错误检查的优势。
我设法使用 Colors.primaries
列表(在colors.dart
文件中找到):
//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);
希望对您有帮助。
这是一种简单的方法。假设您想获得 colors.blue
的材料颜色您可以使用它来获取它: -
MaterialStateProperty.all(Colors.blue)
例如,要设置高架按钮的背景颜色,应提供材料颜色。您可以提供命名的颜色: -
ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.blue),
),
onPressed: (){},
child: Text('Press me'),
),
希望有帮助。