Flutter颜色管理插件eo_color的使用

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

Flutter颜色管理插件eo_color的使用

概述

EO-Color 是一个优雅、面向对象的 Material Design 颜色调色板和色调实现,以及颜色框架。它旨在作为 Flutter 内置颜色的替代品,并作为一个更具体颜色包的基础框架。

主要特点:

  • 提高源代码的可读性和可维护性。
  • 使用形容词(如 ultra, very, bit, light, dark 等)代替晦涩的数字索引(100, 200…800, 900)来选择颜色的阴影。

例如,获取灰色的主要色调只需声明 Grey(),而更亮或更暗的灰色可以通过 Grey.bitLighter()Grey.lighter()Grey.veryDark() 等方法获取。

开始使用

像其他面向对象的包一样,eo_color 使用接口来定义颜色调色板、颜色色调和颜色渐变的概念。因此,主要接口有 PaletteSwatchGradient

Palette 接口

Palette 接口代表可以从其中选择颜色的颜色调色板。通常,Palette 的子类提供命名构造函数来选择所需的颜色,稍后通过 color 属性检索。

例如:

/// 构建一个蓝色容器。
@override
Widget build(BuildContext context) {
  return Container(color: const Blue().color);
}

所有 Material Design 颜色及其相应的强调色都已实现。更多颜色信息请参阅 color-palettes-library

数字索引 vs 命名构造函数

下表显示了 Material Design 索引(100, 200…800, 900)与颜色类的命名构造函数之间的关系:

Index Normal Accent
50 ultraLight
100 veryLight light
200 light ()
300 lighter
400 bitLighter darker
500 ()
600 bitDarker
700 darker dark
800 dark
900 veryDark

Swatch 接口

Swatch 接口表示相关颜色的集合,如灰色阴影、品牌的颜色渐变或用户的首选颜色。其唯一属性 colors 可以一次检索多个颜色,返回一个 Iterable<Color> 对象。

除了 WhiteBlack 类外,每个颜色类都有一个对应的“复数”类实现 Swatch 接口。例如,Greys().colors 可以检索 10 种灰色阴影。

示例代码:

import 'package:eo_color/swatches.dart';
import 'package:flutter/material.dart';

/// 矩形填充由 swatch 实例提供的颜色渐变。
class RectGradient extends StatelessWidget {
  /// 使用给定的颜色调色板填充矩形。
  const RectGradient(Swatch swatch, {Key? key})
      : _swatch = swatch,
        super(key: key);

  /// 使用十种灰色阴影填充矩形。
  const RectGradient.grey({Key? key}) : this(const Greys(), key: key);

  // Material Design 颜色调色板。
  final Swatch _swatch;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: kToolbarHeight / 2,
      decoration: BoxDecoration(
        gradient: LinearGradient(
          end: Alignment.bottomLeft,
          begin: Alignment.topRight,
          colors: _swatch.colors.toList(growable: false),
        ),
      ),
    );
  }
}

Gradient 接口

Gradient 接口表示位置相关的颜色范围,通常用于填充区域。Gradient 子类返回 List<Colors>,这使得它们更适合处理 Flutter 的渐变 API。

示例代码:

import 'package:eo_color/gradients.dart';
import 'package:flutter/material.dart';

/// 使用 Material Design 颜色渐变填充矩形。
class RectGradient extends StatelessWidget {
  /// 使用给定的渐变颜色填充矩形。
  const RectGradient(Gradient gradient, {Key? key})
      : _gradient = gradient,
        super(key: key);

  /// 使用红色渐变填充矩形。
  const RectGradient.reds({Key? key}) : this(const RedsGrad(), key: key);

  // Material Design 渐变颜色。
  final Gradient _gradient;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: kToolbarHeight / 2,
      decoration: BoxDecoration(
        gradient: LinearGradient(
          end: Alignment.bottomLeft,
          begin: Alignment.topRight,
          colors: _gradient.colors,
        ),
      ),
    );
  }
}

完整示例 Demo

以下是一个完整的示例应用,展示了如何使用 eo_color 插件来展示三种颜色调色板:BlueGrey、Grey 和 Brown。

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

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'EO Color Showcase',
      home: Showcase(title: 'Material Design Color Palettes'),
    );
  }
}

/// 展示颜色调色板的小部件。
class Showcase extends StatelessWidget {
  const Showcase({required this.title});

  final String title;

  static const barBg = Grey.veryLight();
  static const barText = Grey.dark();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 0.0,
        backgroundColor: barBg.color,
        title: Text(
          title,
          style: TextStyle(color: barText.color, fontWeight: FontWeight.bold),
        ),
      ),
      body: const SingleChildScrollView(
        padding: EdgeInsets.all(16),
        child: Center(
          child: Wrap(
            children: [
              SwatchWidget.blueGreys(),
              SwatchWidget.greys(),
              SwatchWidget.browns(),
            ],
          ),
        ),
      ),
    );
  }
}

/// 显示颜色调色板的小部件。
class SwatchWidget extends StatelessWidget {
  const SwatchWidget(
    this.swatch,
    String title, {
    super.key,
  }) : title = '$title 50';

  /// 棕色调色板。
  const SwatchWidget.browns({Key? key})
      : this(const Browns(), 'Brown', key: key);

  /// 蓝灰色调色板。
  const SwatchWidget.blueGreys({Key? key})
      : this(const BlueGreys(), 'Blue-Grey', key: key);

  /// 灰色调色板。
  const SwatchWidget.greys({Key? key})
      : this(const Greys(), 'Grey', key: key);

  final Swatch swatch;
  final String title;

  @override
  Widget build(BuildContext context) {
    final colors = swatch.colors.toList(growable: false);
    final labels = [
      title,
      ...const ['100', '200', '300', '400', '500', '600', '700', '800', '900'],
    ];
    return SizedBox(
      width: 250,
      child: Card(
        elevation: 2.0,
        child: Column(
          children: List<ColorTile>.generate(
            colors.length,
            (int i) => ColorTile(
              label: labels[i],
              bgColor: colors[i],
            ),
            growable: false,
          ),
        ),
      ),
    );
  }
}

class ColorTile extends StatelessWidget {
  const ColorTile({
    required this.bgColor,
    required this.label,
    super.key,
  });

  final Color bgColor;
  final String label;

  @override
  Widget build(BuildContext context) {
    final style = TextStyle(color: Colors.white, fontWeight: FontWeight.w500);
    return ListTile(
      tileColor: bgColor,
      leading: Text(label, style: style),
      trailing: Text(
        '#${bgColor.value.toRadixString(16).substring(2).toUpperCase()}',
        style: style,
      ),
    );
  }
}

这个示例应用展示了如何使用 eo_color 插件创建具有不同颜色调色板的 UI 元素。你可以根据需要修改和扩展此示例。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用eo_color插件的示例代码。eo_color是一个用于颜色管理的插件,它可以帮助你更方便地在应用程序中管理和使用颜色。

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

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

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

接下来,你可以在你的Flutter项目中使用eo_color插件。以下是一个简单的示例,展示如何使用eo_color来定义和使用颜色。

1. 创建一个颜色管理文件

你可以创建一个单独的文件(例如colors.dart)来定义和管理所有的颜色。

// colors.dart
import 'package:eo_color/eo_color.dart';

final Color primaryColor = EoColor(0xFF3498DB).color;  // 定义一个主颜色
final Color secondaryColor = EoColor(0xFF2ECC71).color; // 定义一个次要颜色
final Color backgroundColor = EoColor(0xFFECF0F1).color; // 定义一个背景颜色

2. 在你的Flutter应用中使用这些颜色

现在你可以在你的Flutter应用中使用这些定义好的颜色。

// main.dart
import 'package:flutter/material.dart';
import 'colors.dart';  // 导入颜色管理文件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue, // 这里你可以继续使用Flutter自带的颜色,或者自定义
        primaryColor: primaryColor, // 使用eo_color定义的主颜色
        accentColor: secondaryColor, // 使用eo_color定义的次要颜色
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('eo_color 示例'),
        backgroundColor: primaryColor, // 使用eo_color定义的主颜色
      ),
      body: Center(
        child: Container(
          color: backgroundColor, // 使用eo_color定义的背景颜色
          child: Text(
            'Hello, Flutter!',
            style: TextStyle(color: secondaryColor), // 使用eo_color定义的次要颜色
          ),
        ),
      ),
    );
  }
}

3. 运行你的应用

现在,你可以运行你的Flutter应用,并看到使用了eo_color插件定义的颜色。

flutter run

这个示例展示了如何使用eo_color插件来定义和使用颜色。通过这种方法,你可以更轻松地管理和维护你的应用程序中的颜色,使得代码更加整洁和可读。

回到顶部