Flutter颜色管理插件radix_colors的使用
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
更多关于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
插件中的颜色。你可以根据需要扩展和自定义颜色集,并在整个应用中一致地使用这些颜色。