颤音 - 颜色名称字符串到材料颜色



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'),
),

希望有帮助。

最新更新