Flutter 自习室 Color

1,063 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

ARGB32位颜色值

Color的创建

通过 32 位 颜色值

Color(0xFF42A5F5)

image-20220107143302929

ARGB

Color.fromARGB(0xFF, 0x42, 0xA5, 0xF5)

image-20220107143302929

Color.fromARGB(255, 66, 165, 245)

image-20220107143302929

RGBO

Color.fromRGBO(66, 165, 245, 1.0)

image-20220107143302929

如果您在使用颜色时遇到问题,其中您的颜色似乎无法绘制,请检查以确保您指定的是完整的 8 个十六进制数字。 如果您只指定六个,则假定前两位数字为零,这意味着完全透明:

Colors

我们可以通过Colors快速的获取一种颜色

Colors.accents

一组配色板

image-20220107163212442

image-20220107163253751

image-20220107163342550

image-20220107163417378

image-20220107163459095

image-20220107163535606

Colors.amber

image-20220107164528351

Colors.amberAccent

image-20220107171430471

Colors.black

image-20220107172208679

Colors.black12

image-20220107172245590

Colors.black26

image-20220107172616471

Colors.black38

image-20220107172821556

Colors.black45

image-20220107172957466

Colors.black54

image-20220107174142373

Colors.black87

image-20220107174217059

Colors.blue

image-20220107174759164

Colors.blueAccent

image-20220107175024753

Colors.blueGrey

image-20220107175217401

Colors.brown

image-20220107175357442

Colors.cyan

image-20220107175542092

Colors.cyanAccent

image-20220107175718880

Colors.deepOrange

image-20220107180049308

Colors.deepOrangeAccent

image-20220110081925108

Colors.deepPurple

image-20220110082347299

Colors.deepPurpleAccent

image-20220110082608348

Colors.green

image-20220110082757923

Colors.greenAccent

image-20220110083045188

Colors.grey

image-20220110083444182

Colors.indigo

image-20220110083607066

Colors.indigoAccent

image-20220110083757222

Colors.lightBlue

image-20220110083931557

Colors.lightBlueAccent

image-20220110084107407

Colors.lightGreen

image-20220110084221029

Colors.lightGreenAccent

image-20220110084347751

Colors.lime

image-20220110084503370

Colors.limeAccent

image-20220110084621632

Colors.orange

image-20220110084735506

Colors.orangeAccent

image-20220110085002620

Colors.pink

image-20220110085124945

Colors.pinkAccent

image-20220110085301725

Colors.primaries

image-20220110085722413

image-20220110085748855

image-20220110085813241

image-20220110085841805

image-20220110085913483

image-20220110085937655

image-20220110090001241

image-20220110090022835

image-20220110090048317

image-20220110090107072

image-20220110090128471

image-20220110090150423

image-20220110090210723

image-20220110090233000

image-20220110090255116

image-20220110090314027

image-20220110090336888

image-20220110090357556

Colors.purple

image-20220110090514131

Colors.purpleAccent

image-20220110090702553

Colors.red

image-20220110090808983

Colors.redAccent

image-20220110090914880

Colors.teal

image-20220110091034122

Colors.tealAccent

image-20220110091150110

Colors.transparent(透明)

Colors.white

image-20220110091553735

Colors.white10

image-20220110091747310

Colors.white12

image-20220110092059878

Colors.white24

image-20220110092126422

Colors.white30

image-20220110092425654

Colors.white38

image-20220110092528320

Colors.white54

image-20220110092706741

Colors.white60

image-20220110092810688

Colors.white70

image-20220110093027498

Colors.yellow

image-20220110093458367

Colors.yellowAccent

image-20220110093614355

ColorSwatch

一种颜色的色板

MaterialAccentColor

定义一种强调色,分别有100 200 400 700,颜色的值和200相等。

MaterialAccentColor.value == MaterialAccentColor.shade200

MaterialColor

定义单一颜色,分别50 100 200 300 400 500 600 700 800 900,颜色值和500相等

MaterialColor.value == MaterialColor.shade500

CupertinoDynamicColor

属性

属性类型含义
colorColorlight模式正常对比度 基本界面亮度使用颜色
darkColorColorDark模式正常对比度 基本界面亮度使用颜色
darkElevatedColorColorDark模式 正常对比度 提升界面亮度 使用颜色
darkHighContrastColorColorDark模式 高对比度 基本界面亮度使用颜色
elevatedColorColorlight模式 正常对比度 提升界面亮度颜色
highContrastColorColorlight模式高对比度 基本界面亮度颜色
highContrastElevatedColorColorlight模式高对比度 提升界面亮度颜色
darkHighContrastElevatedColorColordark模式高对比度 提升界面亮度颜色

构造方法

CupertinoDynamicColor()

创建BuildContext自动适应的颜色,所有属性必须初始化。

CupertinoDynamicColor.withBrightness()

创建一个自适应颜色,它根据给定的 BuildContext 的亮度(来自 MediaQueryData.platformBrightnessCupertinoThemeData.brightness)更改其有效颜色。 默认的有效颜色是颜色。

属性
colorcolor
elevatedColorcolor
highContrastColorcolor
highContrastElevatedColorcolor
darkColordarkColor
darkElevatedColordarkColor
darkHighContrastColordarkColor
darkHighContrastElevatedColordarkColor

CupertinoDynamicColor.withBrightnessAndContrast

创建一个自适应颜色,它根据给定的 BuildContext 的亮度(来自 MediaQueryData.platformBrightnessCupertinoThemeData.brightness)更改其有效颜色。 默认的有效颜色是颜色。

属性
colorcolor
elevatedColorcolor
highContrastColorhighContrastColor
highContrastElevatedColorhighContrastColor
darkColordarkColor
darkElevatedColordarkColor
darkHighContrastColordarkHighContrastColor
darkHighContrastElevatedColordarkHighContrastColor

根据黑暗模式自动切换颜色

CupertinoButton(
  color: const CupertinoDynamicColor.withBrightness(
    color: Colors.black,
    darkColor: Colors.white,
  ),
  child: const Text(
    "登录",
    style: TextStyle(
      color: CupertinoDynamicColor.withBrightness(
        color: Colors.white,
        darkColor: Colors.black,
      ),
    ),
  ),
  onPressed: () {},
)

A07E36B1-9A1D-4C62-9EB2-D4A2E32F0919-16991-00000A9EF9EDB675

必须在CupertinoApp内部才有效果

CupertinoDynamicColor.withBrightnessText不起作用(这个不知道是不是bug)

主题色

CupertinoButton(
  color: CupertinoTheme.of(context).primaryColor,
  child: const Text("登录"),
  onPressed: () {},
)

19C39959-0883-481C-8A67-9F642C739EEA-16991-00000BD9B73A1691

通过 resolve 生成 CupertinoDynamicColor

CupertinoDynamicColor.resolve(CupertinoColors.darkBackgroundGray, context)

MaterialStateColor

定义一个 Color,它也是一个 MaterialStateProperty。

此类的存在是为了使具有 Color 值属性的小部件也接受 MaterialStateProperty 值。材质状态颜色属性表示取决于小部件的“交互状态”的颜色。此状态表示为一组 MaterialState,如 MaterialState.pressed、MaterialState.focused 和 MaterialState.hovered。

MaterialStateColor 只能与记录其支持的小部件一起使用,例如 TimePickerThemeData.dayPeriodColor。

要使用 MaterialStateColor,您可以:

创建 MaterialStateColor 的子类并实现抽象的 resolve 方法。 使用 MaterialStateColor.resolveWith 并传入一个回调,该回调将用于解析给定状态下的颜色。 如果 MaterialStateColor 用于不支持解析 MaterialStatePropertys 的属性或参数,则其默认颜色值将用于所有状态。

要定义 const MaterialStateColor,您需要扩展 MaterialStateColor 并覆盖其解析方法。您还需要为超级构造函数提供一个 defaultValue,以便我们可以在编译时知道它的默认颜色是什么。

自定义 TimeDatePicker Theme

class CustomTimeDayPeriodColor extends MaterialStateColor {
  CustomTimeDayPeriodColor() : super(_defaultColor);

  static const int _defaultColor = 0xcafefeed;
  static const int _pressedColor = 0xdeadbeef;

  @override
  Color resolve(Set<MaterialState> states) {
    if (states.contains(MaterialState.selected)) {
      return const Color(_pressedColor);
    }
    return const Color(_defaultColor);
  }
}
showTimePicker(
  context: context,
  initialTime: TimeOfDay.now(),
  builder: (context, child) {
    return TimePickerTheme(
      data: TimePickerTheme.of(context).copyWith(
        dayPeriodColor: CustomTimeDayPeriodColor(),
      ),
      child: child ?? Container(),
    );
  },
);

0B47839F-65F8-4983-88AD-373430CAA43E-16991-0000110240620F49