Flutter颜色管理插件radix_colors的使用

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

Flutter颜色管理插件radix_colors的使用

1. 插件简介

radix_colors 是一个用于Flutter的颜色系统插件,提供了一套精心设计的颜色方案,适用于创建美观且易于访问的应用程序和网站。该插件提供了15种颜色调色板,每个调色板包含12个不同的色调步骤(shades),旨在满足各种UI设计需求。

2. 安装

首先,在 pubspec.yaml 文件中添加 radix_colors 依赖:

dependencies:
  radix_colors: ^1.0.3

然后,在Dart文件中导入插件:

import 'package:radix_colors/radix_colors.dart';

3. 使用方法

3.1 轻量级颜色变体

使用轻量级颜色变体时,可以直接访问颜色属性:

RadixColors.amber;
3.2 深色模式颜色变体

对于深色模式,可以使用 dark 属性来获取相应的颜色:

RadixColors.dark.amber;
3.3 动态颜色(自动适应浅色/深色主题)

为了实现根据当前主题自动切换颜色,可以使用 RadixColorsDynamic 类:

RadixColorsDynamic(context).amber;
3.4 12个色调步骤

每个颜色调色板都提供了12个不同的色调步骤,可以根据具体的设计需求选择合适的步骤:

RadixColors.amber.step1;
RadixColors.amber.step2;
// ...
RadixColors.amber.step12;

4. 色调步骤的具体用途

步骤 用途
1 应用背景
2 微弱背景
3 UI元素背景(正常状态)
4 UI元素背景(悬停状态)
5 UI元素背景(激活/选中状态)
6 微弱边框和分隔线
7 UI元素边框和焦点环
8 悬停状态的UI元素边框
9 实心背景(适用于白色前景文本)
10 悬停状态的实心背景
11 低对比度文本
12 高对比度文本

5. 示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 radix_colors 插件。该示例包括了一个简单的UI界面,允许用户在浅色和深色模式之间切换,并展示了不同颜色调色板的各个色调步骤。

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Brightness brightness = Brightness.light;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Radix Colors Demo',
      theme: ThemeData(
        brightness: brightness,
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        backgroundColor: RadixColorsDynamic(context).gray.step1,
        appBar: AppBar(
          elevation: 0,
          backgroundColor: RadixColorsDynamic(context).gray.step1,
          foregroundColor: RadixColorsDynamic(context).gray.step12,
          systemOverlayStyle: SystemUiOverlayStyle.dark,
          title: const Text(
            'Flutter Radix Colors',
            style: TextStyle(fontSize: 16),
          ),
          leading: IconButton(
            onPressed: () {
              setState(() {
                brightness = brightness == Brightness.dark ? Brightness.light : Brightness.dark;
              });
            },
            icon: Icon(
              brightness == Brightness.dark ? Icons.sunny : Icons.nightlight_outlined,
            ),
          ),
        ),
        body: SingleChildScrollView(
          padding: const EdgeInsets.symmetric(vertical: 50, horizontal: 14),
          child: ConstrainedBox(
            constraints: const BoxConstraints(maxWidth: 840),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                // 标题
                Text(
                  "A gorgeous, accessible color system",
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: 28,
                    letterSpacing: -1,
                    fontWeight: FontWeight.w600,
                    color: RadixColorsDynamic(context).gray.step12,
                  ),
                ),
                const SizedBox(height: 12),
                Text(
                  "An open-source color system for designing beautiful, accessible websites and apps.",
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: 16,
                    fontWeight: FontWeight.w300,
                    color: RadixColorsDynamic(context).gray.step11,
                  ),
                ),
                const SizedBox(height: 40),

                // 按钮
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    OutlinedButton(
                      onPressed: () {},
                      child: const Text("API Documentation"),
                    ),
                    const SizedBox(width: 16),
                    OutlinedButton(
                      onPressed: () {},
                      child: const Text("Radix Documentation"),
                    ),
                  ],
                ),
                const SizedBox(height: 80),

                // 显示颜色调色板
                ...colorMap().map((color) {
                  return Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        color.name,
                        style: const TextStyle(
                          fontSize: 18,
                          fontWeight: FontWeight.w600,
                        ),
                      ),
                      const SizedBox(height: 16),
                      colorSteps(),
                      colorBlock(color.name.toLowerCase(), color.primary),
                      colorBlock("${color.name.toLowerCase()}A", color.accent),
                      colorBlock("${color.name.toLowerCase()}Dark", color.primaryDark),
                      colorBlock("${color.name.toLowerCase()}DarkA", color.accentDark, bg: color.primaryDark.step1),
                      const SizedBox(height: 56),
                    ],
                  );
                }).toList(),
              ],
            ),
          ),
        ),
      ),
    );
  }

  Widget colorBlock(String name, RadixColor color, {Color? bg}) {
    return SizedBox(
      height: 36,
      child: Row(
        children: [
          Container(
            width: 100,
            alignment: Alignment.centerLeft,
            child: Text(
              name,
              style: TextStyle(
                fontSize: 12,
                fontWeight: FontWeight.w300,
                color: RadixColors.gray.step10,
              ),
            ),
          ),
          ...List.generate(12, (index) {
            return colorBox(color.step(index + 1), bg);
          }),
        ],
      ),
    );
  }

  Widget colorBox(Color color, Color? bg) {
    return Expanded(
      child: Container(
        color: bg,
        margin: const EdgeInsets.only(right: 2, bottom: 2),
        child: Container(
          color: color,
          width: double.infinity,
          height: double.infinity,
        ),
      ),
    );
  }

  Widget colorSteps() {
    return Row(
      children: [
        const SizedBox(width: 70),
        ...List.generate(12, (index) {
          return Expanded(
            child: Container(
              alignment: Alignment.center,
              padding: const EdgeInsets.only(bottom: 4),
              child: Text(
                "${index + 1}",
                style: const TextStyle(
                  fontSize: 12,
                  fontWeight: FontWeight.w300,
                  color: RadixColors.gray,
                ),
              ),
            ),
          );
        }),
      ],
    );
  }
}

List<_ColorsDemo> colorMap() {
  return [
    _ColorsDemo(name: "Tomato", primary: RadixColors.tomato, accent: RadixColors.tomatoA, primaryDark: RadixColors.dark.tomato, accentDark: RadixColors.dark.tomatoA),
    _ColorsDemo(name: "Red", primary: RadixColors.red, accent: RadixColors.redA, primaryDark: RadixColors.dark.red, accentDark: RadixColors.dark.redA),
    // 其他颜色调色板...
  ];
}

class _ColorsDemo {
  final String name;
  final RadixColor primary;
  final RadixColor accent;
  final RadixColor primaryDark;
  final RadixColor accentDark;

  _ColorsDemo({
    required this.name,
    required this.primary,
    required this.accent,
    required this.primaryDark,
    required this.accentDark,
  });
}

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

1 回复

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


当然,关于Flutter颜色管理插件radix_colors的使用,以下是一个详细的代码示例,展示了如何集成和使用该插件来管理应用中的颜色。

第一步:添加依赖

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

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

第二步:导入插件

在你需要使用颜色的Dart文件中导入radix_colors插件:

import 'package:radix_colors/radix_colors.dart';

第三步:定义颜色

你可以使用RadixColor类来定义和管理你的颜色。假设你想定义一些主题颜色,可以这样做:

// 定义你的主题颜色
final RadixColor primaryColor = RadixColor(
  hex: '#3498db',  // 使用十六进制颜色代码
  name: 'Primary Color',
);

final RadixColor secondaryColor = RadixColor(
  hex: '#2ecc71',
  name: 'Secondary Color',
);

final RadixColor errorColor = RadixColor(
  hex: '#e74c3c',
  name: 'Error Color',
);

// 创建一个颜色集
final List<RadixColor> themeColors = [primaryColor, secondaryColor, errorColor];

第四步:使用颜色

你可以通过RadixColor实例的color属性来获取Flutter的Color对象,然后在你的UI中使用它:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: primaryColor.color,  // 使用定义的主题颜色
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Radix Colors Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 使用定义的颜色
            Container(
              width: 100,
              height: 100,
              color: primaryColor.color,
              child: Center(child: Text('Primary')),
            ),
            SizedBox(height: 20),
            Container(
              width: 100,
              height: 100,
              color: secondaryColor.color,
              child: Center(child: Text('Secondary')),
            ),
            SizedBox(height: 20),
            Container(
              width: 100,
              height: 100,
              color: errorColor.color,
              child: Center(child: Text('Error')),
            ),
          ],
        ),
      ),
    );
  }
}

第五步:运行应用

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

这个示例展示了如何定义、管理和使用radix_colors插件中的颜色。你可以根据需要扩展和自定义颜色集,并在整个应用中一致地使用这些颜色。

回到顶部