当前位置: 首页 > 知识库问答 >
问题:

在Flatter中使用十六进制颜色更改原色

督冠玉
2023-03-14

我想改变我的应用程序中的原色,所以我尝试:

theme: ThemeData(
        primaryColor: const Color(0xFF784CEF),
),

但这不起作用,所以我检查了文档,找到了另一种方法,即使用

dart prettyprint-override">colorScheme: ColorScheme.fromSwatch(
    primarySwatch: Colors.red,
    // but I want 0xFF784CEF as my primary color so I tried
    // primarySwatch: Color(0xFF784CEF), 
    // which gives me an error saying `The argument type 'Color' can't be assigned to the parameter type 'MaterialColor'.`
),

所以我的问题是:如何用十六进制颜色改变原色

共有2个答案

岳君之
2023-03-14

多亏了“https://stackoverflow.com/questions/50081213/how-do-i-use-hexadecimal-color-strings-in-flutter/50081214#50081214"

在flatter中,Color类只接受整数作为参数,或者可以使用指定的构造函数fromARGBfromRGBO

因此,我们只需要将字符串#b74093转换为整数值。此外,我们需要尊重不透明性始终需要指定
255(完整)不透明度由十六进制值FF表示。这已经给我们留下了0xFF。N

块引用

哦,我们只需要像这样追加我们的颜色字符串:

const color = const Color(0xffb74093); // Second `const` is optional in assignments.

这些字母可以选择大写或不大写:

const color = const Color(0xFFB74093);

如果要使用不透明度百分比值,可以使用此表中的值替换第一个FF(也适用于其他颜色通道)。

从Dart2.6.0开始,您可以为Color类创建扩展,该类允许您使用十六进制颜色字符串创建颜色对象:

extension HexColor on Color {
  /// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
  static Color fromHex(String hexString) {
    final buffer = StringBuffer();
    if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
    buffer.write(hexString.replaceFirst('#', ''));
    return Color(int.parse(buffer.toString(), radix: 16));
  }

  /// Prefixes a hash sign if [leadingHashSign] is set to `true` (default is `true`).
  String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}'
      '${alpha.toRadixString(16).padLeft(2, '0')}'
      '${red.toRadixString(16).padLeft(2, '0')}'
      '${green.toRadixString(16).padLeft(2, '0')}'
      '${blue.toRadixString(16).padLeft(2, '0')}';
}

fromHex方法也可以在mixinclass中声明,因为HexColor名称需要显式指定才能使用,但是扩展对toHex方法很有用,可以隐式使用。下面是一个例子:

void main() {
  final Color color = HexColor.fromHex('#aabbcc');

  print(color.toHex());
  print(const Color(0xffaabbcc).toHex());
}

这里的许多其他答案展示了如何从十六进制字符串动态创建Color,就像我上面所做的那样。然而,这样做意味着颜色不能是const。理想情况下,您可以按照我在答案第一部分中解释的方式分配颜色,这在大量实例化颜色时更有效,这通常是Flutter小部件的情况。

岑熙云
2023-03-14

关于MaterialApp主题

theme: Theme.of(context).copyWith(
  colorScheme: Theme.of(context).colorScheme.copyWith(
        primary: const Color(0xFF784CEF),
      ),
),
 类似资料:
  • 问题内容: 我正在尝试在Swift中使用十六进制颜色值,而不是允许您使用的几个标准颜色值,但是我不知道该怎么做。 示例:如何将其用作颜色? 问题答案: 实际上是用十六进制表示的3种颜色分量- 红色,绿色和蓝色。您可以使用前缀在Swift中编写十六进制表示法,例如 为了简化转换,让我们创建一个采用整数(0-255)值的初始化程序: 用法: 如何获得阿尔法? 根据您的用例,您可以简单地使用本机方法,例

  • 问题内容: 假设我有一个十六进制,例如:5fc9f8 是否存在接受“黑暗程度”(-10到10)并返回反映该水平的十六进制的函数? 黑暗是指添加黑色/从颜色中删除黑色。 问题答案: import UIKit 游乐场测试

  • 我用JSON格式存储了很多颜色。我使用rootbeer via gulp将它们转换为sass映射,可以由SCSS处理: 至 我可以很好地使用语法中的颜色,但一旦应用了任何颜色函数,如,编译器就会失败,因为颜色类型完全消失了。 即使使用也不允许sass将其视为字符串,但它需要是一种颜色。 我的问题是,是否有任何方法可以让我强制编译器将此作为一种颜色来处理呢?另一种方法是省略所有内置颜色函数的使用。

  • 如何在Flutter中将这样的十六进制颜色字符串转换为? 我想在Dart中使用一个十六进制颜色代码。

  • 问题内容: 对于Django应用,每个“成员”都分配有一种颜色以帮助识别它们。它们的颜色存储在数据库中,然后在需要时打印/复制到HTML中。唯一的问题是我不确定如何Hex在python / django中生成随机颜色。生成RGB颜色很容易,但是要存储它们,我要么需要a)在“成员”模型中增加三列,要么b)将它们全部存储在同一列中并使用逗号分隔它们,然后,解析HTML的颜色。这些都不是很吸引人,因此,

  • 本文向大家介绍Flutter十六进制颜色转换成颜色对象,包括了Flutter十六进制颜色转换成颜色对象的使用技巧和注意事项,需要的朋友参考一下 十六进制颜色值格式一般如:#ff0000,以#开头,后面跟着6个十六进制字符。 而flutter中不能直接使用此类形式的颜色值,所以必须要转换为flutter颜色对象。 参考地址: https://stackoverflow.com/questions/5