Flutter颜色管理插件uni_color_model的使用

Flutter颜色管理插件uni_color_model的使用

Cover - Unifying Color Model

GitHub License Pub Package Code Size Publisher

Build Status Pull Requests Issues Pub Score

统一的颜色结构用于表示任何颜色:模型(CMYK、RGB、HSL等)、带有或不带有alpha通道,每个通道的深度,逐通道视图(十六进制、十进制、整数、双精度、百分比字符串)等。可以转换这些结构。

这是一个易于使用且经过良好测试的包。欢迎在您的项目中使用它。

当您需要通过名称确定颜色值或反之亦然,请参阅包 UniColorName

如果您正在寻找一个有组织的颜色调色板,请查看 UniColorPalette

分享一些爱并给仓库点个赞以支持该项目。

Dependencies
平台 Android iOS Linux MacOS Windows
支持
SDK Dart Flutter
支持

使用

final c = 0x1805db.rgbInt8Color;
print(c.int24Hex);
print(c.hasAlpha);
print('Red channel: #${c.r.hex()}');

输出:

1805db
false
Red channel: #18

有关详细示例,请参见 UniColorPalette 中的 example/all_palettes 文件夹,其中包含可视化调色板的 Flutter 示例。

颜色调色板

请参阅包 uni_color_palette

术语表

色深或位深

位图图像每像素的位数。常见深度列表

颜色转换器

颜色转换的公式很容易编程,但我们有很多转换器。所以让我们总结一下它们(待办事项):

alpha model type depth structure tone
false cmyk double 4 double int bits
true rgb int 8 int int dec
hsl 10 List int hex
hsv 16 String num bits
xyz UniColor percent double
percent int
  • alpha == 透明度(通道 0)
  • model == 通道(1…4)
  • type == 通道类型
  • depth == 每个通道的深度,仅对类型为 int 的有效
  • structure == 如何保存颜色
  • tone == 如何表示结构
    • int bits == 当 int decint hex 相同时使用
    • num bits == doubleint 的泛化

构造函数 UniColor

  • argbInt8Color, rgbInt8Color, …
  • acmykInt8Color, acmykInt8Color, …

结构 int bits

  • 0x0a1b2c
  • 0xff0a1b2c 带有 alpha
  • 0xabc == 0xaabbcc
  • 0xa == 0xaaaaaa

结构 String<int hex>

大小写不敏感。

允许通道之间有空格。

  • '#0a1b2c' == '0a1b2c' == '0a 1b 2c'
  • '#ff0a1b2c' == 'ff0a1b2c' == 'ff 0a 1b 2c'
  • '#abc' == 'a b c' == 'aabbcc'
  • '#a' == 'aaaaaa'

结构 String<int dec>

包含在待办事项中。

  • '12 134 205'
  • '255 12 134 205'
  • '120' == '120 120 120'

结构 String<percent double>

包含在待办事项中。

  • '0.12 0.134 0.205'
  • '1.0 0.12 0.134 0.205'
  • '0.120' == '0.12 0.12 0.12'

结构 percent<int>

包含在待办事项中。

  • '12% 13% 95%'
  • '100% 12% 13% 95%'
  • '20%' == '20% 20% 20%'

转换器名称使用以下模式:

[model][type][depth]To[model][type][depth][structure][tone]

示例用法

// 作为 ARGB 模型
0xff0a1b2c.argbInt8ToArgbInt8StringIntHex();

输出:

ff0a1b2c
// 作为 ARGB 模型,自动添加 alpha
0x0a1b2c.rgbInt8ToArgbInt8StringIntHex();

输出:

ff0a1b2c
// 作为 RGB UniColor,每个通道 16 位
0x0a1b2c.rgbInt8ToRgbInt16Color();

输出:

// 类型: RgbInt16Color
0a1b2c
// 作为 RGB int,每个通道 16 位
0x0a1b2c.rgbInt8ToRgbInt16();

输出:

// 类型: int
000a001b002c

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

1 回复

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


当然,以下是如何在Flutter项目中使用uni_color_model插件进行颜色管理的示例代码。uni_color_model插件允许你以一种统一的方式管理和转换颜色,非常适合需要复杂颜色处理的应用。

首先,确保你已经在pubspec.yaml文件中添加了uni_color_model依赖:

dependencies:
  flutter:
    sdk: flutter
  uni_color_model: ^最新版本号 # 请替换为实际的最新版本号

然后,运行flutter pub get来获取依赖。

接下来,在你的Dart文件中,你可以按照以下方式使用uni_color_model

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('uni_color_model 示例'),
        ),
        body: ColorManagementExample(),
      ),
    );
  }
}

class ColorManagementExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 创建一个 UniColor 对象
    final UniColor uniColor = UniColor.fromRgb(255, 99, 71); // 示例颜色:番茄红

    // 转换为 Hex 格式
    String hexColor = uniColor.toHex();
    print('Hex Color: $hexColor'); // 输出: #ff6347

    // 转换为 RGB 格式
    List<int> rgbColor = uniColor.toRgb();
    print('RGB Color: ${rgbColor[0]}, ${rgbColor[1]}, ${rgbColor[2]}'); // 输出: 255, 99, 71

    // 转换为 HSL 格式
    List<double> hslColor = uniColor.toHsl();
    print('HSL Color: ${hslColor[0].toStringAsFixed(2)}, ${hslColor[1].toStringAsFixed(2)}%, ${hslColor[2].toStringAsFixed(2)}%'); // 输出类似: 9.72, 100.00%, 64.31%

    // 使用转换后的颜色
    final Color flutterColor = Color(int.parse(hexColor.substring(1), radix: 16));

    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            'Hex Color: $hexColor',
            style: TextStyle(color: flutterColor),
          ),
          SizedBox(height: 20),
          ColoredBox(
            color: flutterColor,
            child: Container(
              width: 100,
              height: 100,
            ),
          ),
        ],
      ),
    );
  }
}

代码说明:

  1. 依赖导入

    • 导入flutter/material.dart用于基础UI组件。
    • 导入uni_color_model/uni_color_model.dart用于颜色管理。
  2. 创建UniColor对象

    • 使用UniColor.fromRgb(255, 99, 71)创建一个表示番茄红的UniColor对象。
  3. 颜色转换

    • 使用toHex()方法将颜色转换为十六进制格式。
    • 使用toRgb()方法将颜色转换为RGB格式。
    • 使用toHsl()方法将颜色转换为HSL格式。
  4. 颜色应用

    • 将十六进制颜色字符串转换为Flutter的Color对象,并应用于TextColoredBox组件。

通过这种方式,你可以利用uni_color_model插件在Flutter应用中轻松管理和转换颜色。

回到顶部