Flutter颜色转换插件from_css_color的使用

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

Flutter颜色转换插件from_css_color的使用

介绍

From CSS Color 是一个用于创建Flutter Color 实例的包,它可以从符合 CSS Color Module Level 3 规范的CSS颜色字符串中生成。支持Hex、RGB(A)、HSL(A) 和 X11 关键字。

此外,它还提供了从 Color 到CSS颜色字符串的反向转换功能,通过扩展方法 toCssColor() 可以实现这一功能。

使用方法

添加依赖

要使用此插件,请将 from_css_color 作为依赖项添加到项目的 pubspec.yaml 文件中:

dependencies:
  from_css_color: ^最新版本号

导入库

在Dart文件中导入该库:

import 'package:from_css_color/from_css_color.dart';

示例代码

创建颜色实例

从Hex创建

var hex = fromCssColor('#fbafba'); // Color(0xFFFBAFBA)
var hexShort = fromCssColor('#fba'); // Color(0xFFFFBBAA)
var hexAlpha = fromCssColor('#fbafbafa'); // Color(0xFAFBAFBA)
var hexAlphaShort = fromCssColor('#fbaa'); // Color(0xAAFFBBAA)

从RGB创建

var rgb = fromCssColor('rgb(100, 5, 32)'); // Color(0xFF640520)
var rgbWithPercents = fromCssColor('rgb(110%, 0%, 0%)'); // Color(0xFFFF0000)
var rgba = fromCssColor('rgb(110%, 0%, 0%, 0.5)'); // Color(0x7FFF0000)

从HSL创建

var hsl = fromCssColor('hsl(100,50%,10%)'); // Color(0xFF15260C)
var hsla = fromCssColor('hsla(-120,100%,50%, .5)'); // Color(0x7F0000FF)

使用X11关键字创建

var navy = fromCssColor('navy'); // Color(0xFF000080)
var violet = fromCssColor('violet'); // Color(0xFFEE82EE)
var transparent = fromCssColor('transparent'); // Color(0x00000000)

颜色转换为CSS字符串

var hexCss = Color(0xFFFBAFBA).toCssString(); // '#fbafba'
var hexShortCss = Color(0xFFBBAAFF).toCssString(); // '#baf'
var hexWithAlphaCss = Color(0xEFFFBBAA).toCssString(); // '#ffbbaaef'
var rgbCss = Color(0xFFFFFFFF).toCssString(format: CssColorString.rgb); // 'rgb(255,255,255)'
var rgbaCss = Color(0x7FFFFFFF).toCssString(format: CssColorString.rgb); // 'rgba(255,255,255,0.5)'

检查颜色字符串的正确性

var checkCorrectHex = isCssColor('#fbafba'); // true
var checkIncorrectHex = isCssColor('#f'); // false

var checkCorrectRgb = isCssColor('rgb(100, 5, 32)'); // true
var checkIncorrectRgb = isCssColor('rgb(100,100)'); // false

var checkCorrectHsl = isCssColor('hsl(100,50%,10%)'); // true
var checkIncorrectHsl = isCssColor('hsl(100,100)'); // false

var checkNavy = isCssColor('navy'); // true
var checkViolet = isCssColor('violet'); // true
var checkTransparent = isCssColor('transparent'); // true

完整示例Demo

下面是一个完整的Flutter应用示例,展示了如何使用 from_css_color 插件来设置容器的颜色,并将其转换回CSS颜色字符串。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('From CSS Color Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Container(
                width: 100,
                height: 100,
                color: fromCssColor('#ff00aa'), // Hex color
              ),
              SizedBox(height: 20),
              Container(
                width: 100,
                height: 100,
                color: fromCssColor('rgb(100, 5, 32)'), // RGB color
              ),
              SizedBox(height: 20),
              Container(
                width: 100,
                height: 100,
                color: fromCssColor('hsl(100,50%,10%)'), // HSL color
              ),
              SizedBox(height: 20),
              Container(
                width: 100,
                height: 100,
                color: fromCssColor('navy'), // X11 keyword
              ),
              SizedBox(height: 20),
              TextButton(
                onPressed: () {
                  final color = const Color(0xFFFBAFBA);
                  print('Color to CSS string: ${color.toCssString()}');
                },
                child: Text('Convert Color to CSS String'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

这个示例展示了如何使用 from_css_color 插件来创建不同类型的颜色实例,并将这些颜色应用于Flutter小部件中。同时,还提供了一个按钮来演示如何将Flutter Color 对象转换为CSS颜色字符串并打印出来。


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

1 回复

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


当然,以下是如何在Flutter项目中使用from_css_color插件来进行颜色转换的代码示例。from_css_color插件允许你将CSS颜色格式转换为Flutter的Color对象。

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

dependencies:
  flutter:
    sdk: flutter
  from_css_color: ^x.y.z  # 请替换为最新版本号

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

接下来,你可以在你的Dart代码中导入并使用from_css_color插件。以下是一个完整的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('CSS Color Converter Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Hex Color:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              Container(
                decoration: BoxDecoration(
                  color: hexToColor('#4CAF50'), // Convert hex to Color
                ),
                width: 100,
                height: 100,
              ),
              SizedBox(height: 20),
              Text(
                'RGB Color:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              Container(
                decoration: BoxDecoration(
                  color: rgbToColor('rgb(76, 175, 80)'), // Convert rgb to Color
                ),
                width: 100,
                height: 100,
              ),
              SizedBox(height: 20),
              Text(
                'RGBA Color:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              Container(
                decoration: BoxDecoration(
                  color: rgbaToColor('rgba(76, 175, 80, 0.5)'), // Convert rgba to Color
                ),
                width: 100,
                height: 100,
              ),
            ],
          ),
        ),
      ),
    );
  }

  // Convert hex string to Color
  Color hexToColor(String hex) {
    return Color(int.parse(hex.substring(1), radix: 16));
  }

  // Convert rgb string to Color using from_css_color package
  Color rgbToColor(String rgb) {
    var color = CssColor(rgb).toColor();
    return color != null ? color : Colors.transparent;
  }

  // Convert rgba string to Color using from_css_color package
  Color rgbaToColor(String rgba) {
    var color = CssColor(rgba).toColor();
    return color != null ? color : Colors.transparent;
  }
}

注意

  1. 在上面的代码中,hexToColor方法是一个简单的帮助方法,用于将十六进制字符串转换为Flutter的Color对象。这不是from_css_color插件的一部分,但展示了另一种常见的颜色转换方法。

  2. rgbToColorrgbaToColor方法使用了from_css_color插件的CssColor类来解析CSS颜色字符串并转换为Flutter的Color对象。

  3. 请注意,from_css_color插件的实际API可能会有所不同,具体取决于其版本。请参考该插件的官方文档或源代码以获取最新和最准确的用法。

  4. 由于from_css_color插件可能不包含直接将rgba字符串转换为Color的方法(具体取决于其实现),上面的示例假设CssColor类可以处理rgba字符串。如果插件不支持,你可能需要自己解析字符串或使用其他方法。

回到顶部