Flutter色彩空间转换插件oklch的使用
Flutter色彩空间转换插件oklch的使用
该插件旨在模拟OKLCH色彩空间并简化在Flutter应用中使用OKLCH的过程。
参考了以下网站进行开发:https://lch.oklch.com/#50,84.7,42.57,100
请注意,该插件的结果可能与上述网站不同,但未来会逐渐改进以提供相同的结果。
特性
- ✅ 将RGB转换为OKLCH
- ✅ 将OKLCH转换为RGB
- ✅ 基于OKLCH的颜色选择器
使用示例
以下是使用oklch
插件的完整示例代码:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:oklch/oklch.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({
super.key,
});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: 'OKLCH Color Picker Example',
home: ColorPickerDemo(),
);
}
}
class ColorPickerDemo extends StatefulWidget {
const ColorPickerDemo({
super.key,
});
[@override](/user/override)
_ColorPickerDemoState createState() => _ColorPickerDemoState();
}
class _ColorPickerDemoState extends State<ColorPickerDemo> {
static Color startColor = Colors.blue;
Color _selectedColor = startColor;
TextEditingController rgbController = TextEditingController();
TextEditingController oklchController = TextEditingController();
TextEditingController hexController = TextEditingController();
OKLCHColor _oKLCHColor = OKLCHColor.fromColor(startColor);
[@override](/user/override)
void initState() {
super.initState();
_updateColorControllers(_selectedColor);
}
void _updateColorControllers(Color color) {
_oKLCHColor = OKLCHColor.fromColor(color);
rgbController.text = 'RGB(${color.red}, ${color.green}, ${color.blue})';
oklchController.text = _oKLCHColor.textDescription;
hexController.text = _oKLCHColor.rgbHex;
}
String _generateOKLCHUrl() {
return 'https://oklch.com/#${_oKLCHColor.lightness.toStringAsFixed(2)},${_oKLCHColor.chroma.toStringAsFixed(2)},${_oKLCHColor.hue.toStringAsFixed(2)},100';
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('OKLCH Color Picker Demo'),
actions: [
IconButton(
icon: const Icon(Icons.open_in_new),
onPressed: () {
final String url = _generateOKLCHUrl();
debugPrint(url);
launchUrl(Uri.parse(url));
},
),
],
),
body: SingleChildScrollView(
child: Column(
children: [
Container(
height: 200,
color: _selectedColor,
child: const Center(
child: Text(
'Background Color',
style: TextStyle(color: Colors.white, fontSize: 24),
),
),
),
OKLCHColorPickerWidget(
color: _selectedColor,
onColorChanged: (color) {
setState(() {
_selectedColor = color;
_updateColorControllers(color);
});
},
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
controller: rgbController,
decoration: const InputDecoration(labelText: 'RGB Value'),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
controller: oklchController,
decoration: const InputDecoration(labelText: 'OKLCH Value'),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
controller: hexController,
decoration: const InputDecoration(labelText: 'Hex Value'),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
MaterialButton(
child: const Text('Copy RGB'),
onPressed: () {
Clipboard.setData(ClipboardData(text: rgbController.text));
},
),
MaterialButton(
child: const Text('Copy OKLCH'),
onPressed: () {
Clipboard.setData(ClipboardData(text: oklchController.text));
},
),
MaterialButton(
child: const Text('Copy Hex'),
onPressed: () {
Clipboard.setData(ClipboardData(text: hexController.text));
},
),
],
),
],
),
),
);
}
}
更多关于Flutter色彩空间转换插件oklch的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter色彩空间转换插件oklch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你需要进行色彩空间的转换,特别是使用OKLCH颜色空间,你可以使用一些现成的插件或库来实现。OKLCH是一种基于Oklab颜色模型的颜色空间,它使用亮度(Lightness)、色度(Chroma)和色调(Hue)来表示颜色。
目前,Flutter本身并没有直接支持OKLCH颜色空间的官方库,但你可以使用一些第三方库来帮助你进行颜色空间转换。以下是一个简单的示例,展示如何使用一个名为 color
的 Dart 包来进行OKLCH颜色空间的转换。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 color
包的依赖:
dependencies:
flutter:
sdk: flutter
color: ^3.0.0 # 请确保使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 使用 color
包进行转换
import 'package:color/color.dart';
void main() {
// 使用Oklab颜色空间创建一个颜色
OklabColor oklabColor = OklabColor(0.5, 0.1, 0.2);
// 将Oklab颜色转换为Oklch颜色
OklchColor oklchColor = oklabColor.toOklch();
print('Oklch Color: L=${oklchColor.l}, C=${oklchColor.c}, H=${oklchColor.h}');
// 将Oklch颜色转换回Oklab颜色
OklabColor convertedOklabColor = oklchColor.toOklab();
print('Converted Oklab Color: L=${convertedOklabColor.l}, a=${convertedOklabColor.a}, b=${convertedOklabColor.b}');
}
3. 解释
- OklabColor: 这是
color
包中表示Oklab颜色空间的类。它有三个属性:l
(亮度)、a
和b
(色度分量)。 - OklchColor: 这是
color
包中表示Oklch颜色空间的类。它有三个属性:l
(亮度)、c
(色度)和h
(色调)。 - toOklch(): 将Oklab颜色转换为Oklch颜色。
- toOklab(): 将Oklch颜色转换回Oklab颜色。
4. 其他操作
你还可以将这些颜色转换为其他颜色空间,例如RGB、HSL等:
// 将Oklch颜色转换为RGB颜色
RgbColor rgbColor = oklchColor.toRgb();
print('RGB Color: R=${rgbColor.r}, G=${rgbColor.g}, B=${rgbColor.b}');