Flutter颜色模型管理插件flutter_color_models的使用

Flutter颜色模型管理插件flutter_color_models的使用

flutter_color_models 是一个用于管理和转换颜色模型的 Flutter 插件。它封装了 color_models 插件,并实现了 Flutter 的 [Color] 类。如果您需要在非 Flutter 环境下使用类似的工具,可以参考以下链接:
https://pub.dev/packages/color_models

此外,如果您需要创建、生成和修改配色方案,可以查看另一个相关的插件:
https://pub.dev/packages/flutter_palette


使用方法

首先,在项目中引入插件:

import 'package:flutter_color_models/flutter_color_models.dart';

颜色空间

flutter_color_models 提供了以下颜色空间模型:

  • CMYK: [CmykColor]
  • HSI: [HsiColor]
  • HSL: [HslColor]
  • HSP: [HspColor]
  • HSB: [HsbColor]
  • LAB: [LabColor]
  • Oklab: [OklabColor]
  • RGB: [RgbColor]
  • XYZ: [XyzColor]

创建颜色

颜色可以通过直接构造、fromList()extrapolate() 方法来创建。

示例:RGB颜色(无透明度)

// RGB 无透明度
RgbColor(255, 0, 0); // 红色
RgbColor.fromList(<num>[255, 0, 0]); // 红色
RgbColor.extrapolate(<num>[1.0, 0.0, 0.0]); // 红色

示例:RGB颜色(有透明度)

// RGB 有透明度
RgbColor(255, 0, 0, 1.0); // 红色,透明度为1.0
RgbColor.fromList(<num>[255, 0, 0, 255]); // 红色,透明度为255
RgbColor.extrapolate(<num>[1.0, 0.0, 0.0, 255]); // 红色,透明度为255

示例:CMYK颜色(无透明度)

// CMYK 无透明度
CmykColor(0.0, 100.0, 100.0, 0.0); // 黑色
CmykColor.fromList(<num>[0.0, 100.0, 100.0, 0.0]); // 黑色
CmykColor.extrapolate(<num>[0.0, 1.0, 1.0, 0.0]); // 黑色

示例:CMYK颜色(有透明度)

// CMYK 有透明度
CmykColor(0.0, 100.0, 100.0, 0.0, 1.0); // 黑色,透明度为1.0
CmykColor.fromList(<num>[0.0, 100.0, 100.0, 0.0, 255]); // 黑色,透明度为255
CmykColor.extrapolate(<num>[0.0, 1.0, 1.0, 0.0, 255]); // 黑色,透明度为255

示例:HSL颜色(无透明度)

// HSL 无透明度
HslColor(0.0, 100.0, 50.0); // 红色
HslColor.fromList(<num>[0.0, 100.0, 50.0]); // 红色
HslColor.extrapolate(<num>[0.0, 1.0, 0.5]); // 红色

示例:HSL颜色(有透明度)

// HSL 有透明度
HslColor(0.0, 100.0, 50.0, 1.0); // 红色,透明度为1.0
HslColor.fromList(<num>[0.0, 100.0, 50.0, 255]); // 红色,透明度为255
HslColor.extrapolate(<num>[0.0, 1.0, 0.5, 255]); // 红色,透明度为255

颜色模型与 Color 的相互转换

每个颜色模型都提供了 toColor() 和静态方法 fromColor(),用于将 [Color] 转换为 [ColorModel],反之亦然。如果不在 [RgbColor] 上调用,则会自动转换为目标颜色空间。

示例:颜色模型与 Color 的相互转换

Color color = Color(0xFFFFFF00); // 黄色

CmykColor cmykColor = CmykColor.fromColor(color);
color = cmykColor.toColor();

HsiColor hsiColor = HsiColor.fromColor(color);
color = hsiColor.toColor();

HslColor hslColor = HslColor.fromColor(color);
color = hslColor.toColor();

HspColor hspColor = HspColor.fromColor(color);
color = hspColor.toColor();

HsvColor hsvColor = HsvColor.fromColor(color);
color = hsvColor.toColor();

LabColor labColor = LabColor.fromColor(color);
color = labColor.toColor();

RgbColor rgbColor = RgbColor.fromColor(color);
color = rgbColor.toColor();

XyzColor xyzColor = XyzColor.fromColor(color);
color = xyzColor.toColor();

由于基类 [ColorModel] 缺乏 toColor 方法,因此可以使用全局方法 toColor() 进行转换:

var color = toColor(color);

不同颜色空间之间的转换

每个颜色模型都有方法将其自身转换为其他颜色模型。此外,还可以通过构造函数 [ColorModel.from] 接受任意颜色空间的颜色并返回其自身的类型。

示例:颜色空间之间的转换

// 创建一个HSB颜色
HsbColor originalColor = HsbColor(0.3, 0.8, 0.7);

// 转换为RGB => RgbColor(64, 179, 36)
RgbColor rgbColor = RgbColor.from(originalColor);

// 转换为CMYK => CmykColor(64.25, 0, 79.89, 29.8)
CmykColor cmykColor = CmykColor.from(rgbColor);

// 回到HSB => HsbColor(0.3, 0.8, 0.7)
HsbColor hsbColor = HsbColor.from(cmykColor);

注意:所有颜色转换都以 RGB 色彩空间作为中介。为了最小化精度损失,RgbColor 私下存储 RGB 值为 [num] 而不是 [int]。可以通过 toPreciseList() 方法获取这些值。


颜色调整

每个 [ColorModel] 提供了以下便捷方法:

  • [inverted]: 将颜色属性反转。
  • [opposite]: 返回相反的色调。
  • [rotateHue]: 旋转色调。
  • [warmer]: 向暖色调调整。
  • [cooler]: 向冷色调调整。

示例:颜色调整

final orange = RgbColor(255, 144, 0);

print(orange.inverted); // RgbColor(0, 111, 255);
print(orange.opposite); // RgbColor(0, 111, 255);

print(orange.rotateHue(30)); // RgbColor(239, 255, 0);
print(orange.rotateHue(-30)); // RgbColor(255, 17, 0);

print(orange.warmer(30)); // RgbColor(239, 255, 0);
print(orange.cooler(30)); // RgbColor(255, 17, 0);

颜色插值

每个颜色模型都有一个 [lerpTo] 方法,用于计算指定数量的步长,返回两颜色之间的所有中间颜色。

示例:颜色插值

final color1 = RgbColor(255, 0, 0); // 红色
final color2 = RgbColor(0, 0, 255); // 蓝色

// 计算包含5个颜色的列表:[color1], [color2]及其3个中间颜色
final colors = color1.lerpTo(color2, 3);

// [RgbColor(255, 0, 0, 255), RgbColor(191, 0, 64, 255), RgbColor(128, 0, 128, 255), RgbColor(64, 0, 191, 255), RgbColor(0, 0, 255, 255)]
print(colors);

// 如果仅需要中间颜色,可以设置`excludeOriginalColors`为`true`
final steps = color1.lerpTo(color2, 3, excludeOriginalColors: true);

// [RgbColor(191, 0, 64, 255), RgbColor(128, 0, 128, 255), RgbColor(64, 0, 191, 255)]
print(steps);

配色方案增强

color_models 提供了一个扩展方法,用于增强配色方案。它通过将颜色分布在一个抽象梯度中,并根据位置计算新的颜色。

示例:增强配色方案

final palette = <ColorModel>[
  RgbColor(255, 0, 0),
  RgbColor(0, 255, 0),
  RgbColor(0, 0, 255),
];

// [RgbColor(255, 0, 0), RgbColor(128, 128, 0), RgbColor(0, 255, 0), RgbColor(0, 128, 128), RgbColor(0, 0, 255)]
final newPalette = palette.augment(5);

// [RgbColor(255, 0, 0), RgbColor(170, 85, 0), RgbColor(85, 170, 0), RgbColor(0, 255, 0), RgbColor(0, 0, 255)]
final newPaletteWithStops = palette.augment(5, stops: [0.0, 0.75, 1.0]);

色相饱和度值(Chroma)

每个颜色模型都有一个 [chroma] 属性,表示颜色的亮度,范围为 01

示例:Chroma值

print(RgbColor(0, 0, 0).chroma); // 0
print(RgbColor(127, 127, 127).chroma); // 0.5
print(RgbColor(255, 255, 255).chroma); // 1.0

final color = RgbColor(42, 176, 232);
print(color.chroma); // 0.534
print(color.withChroma(0.3)); // RgbColor(21, 101, 135)

更多关于Flutter颜色模型管理插件flutter_color_models的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter颜色模型管理插件flutter_color_models的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_color_models 是一个 Flutter 插件,用于在 Flutter 应用中处理不同的颜色模型(如 RGB、HSL、HSV、CMYK 等)。它提供了多种颜色模型之间的转换功能,并允许你轻松地在这些模型之间进行转换和操作。

安装

首先,你需要在 pubspec.yaml 文件中添加 flutter_color_models 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_color_models: ^2.0.0

然后运行 flutter pub get 来安装依赖。

基本用法

1. 创建颜色对象

你可以使用不同的颜色模型创建颜色对象。例如:

import 'package:flutter_color_models/flutter_color_models.dart';

void main() {
  // RGB 颜色
  final rgbColor = RgbColor(255, 0, 0); // 红色

  // HSL 颜色
  final hslColor = HslColor(0, 1.0, 0.5); // 红色

  // HSV 颜色
  final hsvColor = HsvColor(0, 1.0, 1.0); // 红色

  // CMYK 颜色
  final cmykColor = CmykColor(0, 1.0, 1.0, 0); // 红色
}

2. 颜色模型之间的转换

你可以在不同的颜色模型之间进行转换。例如:

import 'package:flutter_color_models/flutter_color_models.dart';

void main() {
  // RGB 转 HSL
  final rgbColor = RgbColor(255, 0, 0);
  final hslColor = rgbColor.toHslColor();
  print(hslColor); // HslColor(h: 0.0, s: 1.0, l: 0.5)

  // HSL 转 HSV
  final hsvColor = hslColor.toHsvColor();
  print(hsvColor); // HsvColor(h: 0.0, s: 1.0, v: 1.0)

  // HSV 转 CMYK
  final cmykColor = hsvColor.toCmykColor();
  print(cmykColor); // CmykColor(c: 0.0, m: 1.0, y: 1.0, k: 0.0)
}

3. 使用颜色

你可以将这些颜色对象直接用于 Flutter 的 Color 对象:

import 'package:flutter/material.dart';
import 'package:flutter_color_models/flutter_color_models.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final rgbColor = RgbColor(255, 0, 0);
    final color = rgbColor.toColor();

    return MaterialApp(
      home: Scaffold(
        backgroundColor: color,
        body: Center(
          child: Text('Hello, World!', style: TextStyle(color: Colors.white)),
        ),
      ),
    );
  }
}

其他功能

flutter_color_models 还提供了其他一些有用的功能,例如:

  • 颜色混合:你可以使用 mix 方法将两种颜色混合在一起。
  • 颜色调整:你可以调整颜色的亮度、饱和度等属性。
import 'package:flutter_color_models/flutter_color_models.dart';

void main() {
  final color1 = RgbColor(255, 0, 0);
  final color2 = RgbColor(0, 0, 255);

  // 混合颜色
  final mixedColor = color1.mix(color2, 0.5);
  print(mixedColor); // RgbColor(r: 127, g: 0, b: 127)

  // 调整亮度
  final adjustedColor = color1.withLightness(0.8);
  print(adjustedColor); // RgbColor(r: 204, g: 0, b: 0)
}
回到顶部