Flutter颜色处理插件hsluv的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter颜色处理插件hsluv的使用

HSLuv是一个基于Dart和Flutter的颜色处理库,它提供了一种更符合人类感知的颜色表示方法。与传统的HSL相比,HSLuv在改变亮度(Lightness)时,颜色的变化更加符合人眼的感知。

安装

首先,在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  hsluv: ^最新版本号

例如:

dependencies:
  hsluv: ^2.0.0

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

使用示例

低级用法

你可以直接通过数值列表来操作颜色转换。下面的例子展示了如何将RGB颜色转换为HSLuv颜色,并输出其十六进制表示:

import 'package:hsluv/hsluv.dart';

void main() {
  // Low level usage.
  final List<double> hsluvLow = Hsluv.rgbToHsluv([0.2, 0.5, 0.7]);
  print(Hsluv.hsluvToHex(hsluvLow));
}

高级用法

HSLuvColor类提供了更高级、更易用的方法来处理颜色。它可以像Flutter内置的HSLColor一样使用:

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

void main() {
  // High level usage.
  final hsluvFromColor = HSLuvColor.fromColor(Colors.red);
  print(hsluvFromColor.toString());

  final hsluvFromHSL = HSLuvColor.fromHSL(300, 70, 60);
  print(hsluvFromHSL.toString());
}

完整Demo示例

以下是一个完整的Flutter应用示例,演示了如何使用hsluv插件来创建一个简单的颜色选择器界面:

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'HSLuv Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ColorPickerScreen(),
    );
  }
}

class ColorPickerScreen extends StatefulWidget {
  [@override](/user/override)
  _ColorPickerScreenState createState() => _ColorPickerScreenState();
}

class _ColorPickerScreenState extends State<ColorPickerScreen> {
  double hue = 0;
  double saturation = 100;
  double lightness = 50;

  Color color = Colors.red;

  void updateColor() {
    final hsluv = [hue, saturation, lightness];
    final rgb = Hsluv.hsluvToRgb(hsluv);
    setState(() {
      color = Color.fromRGBO((rgb[0] * 255).round(), (rgb[1] * 255).round(), (rgb[2] * 255).round(), 1);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('HSLuv Color Picker'),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: Container(
              color: color,
              child: Center(
                child: Text(
                  'Selected Color',
                  style: TextStyle(color: useWhiteForeground(color) ? Colors.white : Colors.black),
                ),
              ),
            ),
          ),
          Slider(
            value: hue,
            min: 0,
            max: 360,
            onChanged: (value) {
              hue = value;
              updateColor();
            },
          ),
          Slider(
            value: saturation,
            min: 0,
            max: 100,
            onChanged: (value) {
              saturation = value;
              updateColor();
            },
          ),
          Slider(
            value: lightness,
            min: 0,
            max: 100,
            onChanged: (value) {
              lightness = value;
              updateColor();
            },
          ),
        ],
      ),
    );
  }

  bool useWhiteForeground(Color color) {
    final dark = ThemeData.estimateBrightnessForColor(color) == Brightness.dark;
    return !dark;
  }
}

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

1 回复

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


在Flutter中,hsluv 是一个用于处理颜色的库,它基于 HSLuv 颜色空间,这种颜色空间相较于传统的 HSL(Hue, Saturation, Lightness)颜色空间,在感知均匀性方面表现更好。这意味着在 HSLuv 空间中,颜色之间的视觉差异更加线性,非常适合颜色选择和渐变。

以下是如何在 Flutter 中使用 hsluv 插件的一个代码示例:

  1. 添加依赖: 首先,在你的 pubspec.yaml 文件中添加 hsluv 依赖:

    dependencies:
      flutter:
        sdk: flutter
      hsluv: ^0.2.0  # 确保使用最新版本,版本号可能有所不同
    
  2. 导入库: 在你的 Dart 文件中导入 hsluv 库:

    import 'package:hsluv/hsluv.dart';
    
  3. 使用 HSLuv 颜色转换: 下面是一个示例,展示如何将 RGB 颜色转换为 HSLuv,然后再转换回 RGB:

    void main() {
      // 定义一个 RGB 颜色
      final List<int> rgbColor = [255, 99, 71]; // 一个橙红色
    
      // 将 RGB 转换为 HSLuv
      final HSLuvColor hsluvColor = RGBColor.fromList(rgbColor).toHSLuv();
    
      print('RGB: $rgbColor -> HSLuv: ${hsluvColor.h}, ${hsluvColor.s * 100}, ${hsluvColor.l * 100}');
    
      // 将 HSLuv 转换回 RGB
      final List<int> newRgbColor = hsluvColor.toRGB().toList();
    
      print('HSLuv: ${hsluvColor.h}, ${hsluvColor.s * 100}, ${hsluvColor.l * 100} -> RGB: $newRgbColor');
    }
    

    在这个示例中,我们首先定义了一个 RGB 颜色 [255, 99, 71],然后将其转换为 HSLuv 颜色。打印出的 HSLuv 值是以 h(色调,范围 0-360)、s(饱和度,范围 0-1)、l(亮度,范围 0-1)表示的。之后,我们将 HSLuv 颜色转换回 RGB 颜色,并打印出结果。

  4. 在 Flutter Widget 中使用: 你可以在 Flutter 的 Widget 中使用这些颜色转换功能,例如,在一个按钮的背景色中应用转换后的颜色:

    import 'package:flutter/material.dart';
    import 'package:hsluv/hsluv.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('HSLuv Example'),
            ),
            body: Center(
              child: Container(
                width: 200,
                height: 200,
                color: Color.fromRGBO(
                  // 使用转换后的 RGB 颜色
                  hsluvToRgb(200, 0.5, 0.5)[0],
                  hsluvToRgb(200, 0.5, 0.5)[1],
                  hsluvToRgb(200, 0.5, 0.5)[2],
                  1.0,
                ),
                child: Center(
                  child: Text(
                    'HSLuv Color',
                    style: TextStyle(color: Colors.white),
                  ),
                ),
              ),
            ),
          ),
        );
      }
    
      // 辅助函数:将 HSLuv 转换为 RGB
      List<int> hsluvToRgb(double h, double s, double l) {
        final HSLuvColor hsluvColor = HSLuvColor(h, s, l);
        final RGBColor rgbColor = hsluvColor.toRGB();
        return [rgbColor.r, rgbColor.g, rgbColor.b];
      }
    }
    

在这个 Flutter 应用示例中,我们创建了一个简单的界面,其中包含一个中心对齐的容器,容器的颜色是通过 HSLuv 转换得到的 RGB 颜色。

请注意,hsluv 库的具体 API 可能会随着版本更新而有所变化,因此建议查阅最新的官方文档以获取最准确的信息。

回到顶部