Flutter颜色转换插件color_hex的使用

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

Flutter颜色转换插件color_hex的使用

插件介绍

color_hex 是一个帮助你将十六进制颜色转换为 Color() 对象,以及将 Color() 对象转换为十六进制颜色的插件。该插件由 Nasr Al-Rahbi 开发。

安装插件

首先,你需要在你的 pubspec.yaml 文件中添加 color_hex 插件,并指定版本号(例如:color_hex: ^1.0.0)。

dependencies:
  color_hex: ^1.0.0

使用示例

方法一:通过扩展名使用

你可以直接在文本或颜色上使用扩展名来实现颜色和十六进制颜色之间的转换:

Color color = Colors.deepPurple;
String hex = "#000000";
/// 这里我们将十六进制颜色转换为 `Color()` 对象
Text(color.convertToHex.hex, style: TextStyle(color: hex.convertToColor)),

方法二:使用函数进行转换

你也可以通过调用特定的函数来进行颜色和十六进制颜色之间的转换:

Color color = Colors.deepPurple;
String hex = "#000000";

InkWell(
  onTap: () {
    /// 将十六进制颜色转换为 `Color()`
    print(hexTo Color(hex).toString());

    /// 将 `Color()` 转换为十六进制颜色
    print(color to Hex(color).hex);
    print(color to Hex(color).color);

  },
  child: Text(
    "点击转换",
    style: TextStyle(
      /// 颜色转换后再次转换回十六进制颜色
      color: color convert To Hex(hex)!.convert To Color,
    ),
  )
)

示例代码

下面是一个完整的示例代码,展示了如何使用 color_hex 插件进行颜色和十六进制颜色之间的转换。

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Color color = Colors.deepPurple;
  String hex = "#000000";

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        // Center is a layout widget. It takes a single child and positions it in the middle of the parent.
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            /// Convert Using Extension
            Text(
              color.convertTo Hex.hex!,
              style: TextStyle(color: hex.convert To Color),
            ),
            InkWell(
                onTap: () {
                  /// Convert HexColor to Color()
                  print(hex to Color(hex).toString());

                  /// Convert Color() to HexColor
                  print(color to Hex(color).hex);
                  print(color to Hex(color).color);

                },
                child: Text(
                  "点击转换",
                  style: TextStyle(
                    /// 颜色转换后再次转换回十六进制颜色
                    color: color convert To Hex(hex)!.convert To Color,
                  ),
                ))
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用color_hex插件来进行颜色转换的代码示例。color_hex插件允许你将十六进制颜色代码转换为Flutter的Color对象,反之亦然。

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

dependencies:
  flutter:
    sdk: flutter
  color_hex: ^1.0.0  # 请检查最新版本号

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

接下来,在你的Dart文件中,你可以这样使用color_hex插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Color Hex Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 将十六进制颜色代码转换为Flutter的Color对象
              Container(
                color: HexColor("#FF5733"), // 使用HexColor类来解析十六进制颜色代码
                width: 100,
                height: 100,
                child: Center(
                  child: Text(
                    "#FF5733",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
              ),
              SizedBox(height: 20),
              // 将Flutter的Color对象转换为十六进制颜色代码
              Text(
                'Color to Hex: ${ColorToHex(Colors.blue)}',
                style: TextStyle(fontSize: 20),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

// 扩展Color类以包含toHexString方法(这是可选的,但推荐这样做以保持代码整洁)
extension ColorToHexExtension on Color {
  String get toHexString {
    return HexColor.fromColor(this);
  }
}

// HexColor类(从color_hex包中导入或自行实现,但推荐使用包中的实现)
class HexColor extends Color {
  static int _getColorFromHex(String hexColor) {
    hexColor = hexColor.toUpperCase().replaceAll("#", "");
    if (hexColor.length == 6) {
      hexColor = "FF" + hexColor;
    }
    return int.parse(hexColor, radix: 16);
  }

  HexColor(String hexColor) : super(_getColorFromHex(hexColor));

  factory HexColor.fromColor(Color color) {
    return HexColor(color.value.toRadixString(16).padLeft(8, '0').toUpperCase());
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了color_hex依赖。
  2. MyApp组件中,使用HexColor类将一个十六进制颜色代码#FF5733转换为Flutter的Color对象,并将其应用于一个Container的背景色。
  3. 使用ColorToHexExtension扩展为Color类添加了一个toHexString方法(虽然这不是必须的,但可以使代码更整洁)。
  4. 使用HexColor.fromColor方法将Flutter的Color对象(如Colors.blue)转换为十六进制颜色代码,并在Text组件中显示。

注意:虽然上面的代码示例中展示了如何扩展Color类,但color_hex包本身已经提供了这些功能。直接使用包中的HexColor类即可。上面的扩展示例主要是为了展示如何扩展类并添加自定义方法。

回到顶部