Flutter颜色选择器插件flutter_color_picker_wheel的使用

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

Flutter颜色选择器插件flutter_color_picker_wheel的使用

Flutter Color Picker Wheel 是一个易于使用的组件,可以进行高度定制。

  • 直接使用 WheelColorPicker:通过提供您想要包含的颜色列表和动画配置来使用。
  • 自定义 OverlayEntryContent:您可以管理自己的 OverlayEntry
  • 预设设置:此库提供了预设设置,使使用该组件更加简单。

如何使用

在您的 pubspec.yaml 文件中添加依赖项:

flutter_color_picker_wheel: ^0.0.1

展示

以下是不同预设和使用方式的展示:

预设名称 描述
Fan Default 扇形默认预设
Fan Simple 扇形简单预设
Sun Ray Default 太阳射线默认预设
Sun Ray Simple 太阳射线简单预设
Detached Full Screen without Gap 带有间隙的全屏分离
Detached Full Screen with Gap 不带间隙的全屏分离
Custom Color 自定义颜色集
Custom Animation 自定义动画
Manage Your Own OverlayEntry 管理您自己的 OverlayEntry

示例代码

你可以找到更多示例代码在本仓库的示例路径中。

简单用法
import 'package:flutter_color_picker_wheel/flutter_color_picker_wheel.dart';

Color color; /// 你希望在 initState 方法中初始化这个颜色

Widget myButton = WheelColorPicker(
    onSelect: (Color newColor) {
        setState(() {
            color = newColor;
        });
    },
    /// 长按打开,另一种行为是点击打开
    behaviour: ButtonBehaviour.longPressToOpen,
    /// 初始颜色
    defaultColor: color,
    /// fanLikeAnimationConfig 是一个预设,可以从包中导入
    animationConfig: fanLikeAnimationConfig,   
    /// simpleColors 是一个预设,可以从包中导入
    colorList: simpleColors,
    /// 中间可点击按钮的大小
    buttonSize: 40,
    /// 每个片段的高度(外半径 - 内半径)
    pieceHeight: 25,
    /// 轮子形状的起始半径
    innerRadius: 80,
);
自定义颜色集
WheelColorPicker(
    onSelect: (Color newColor) {
        setState(() {
            color = newColor;
        });
    },
    defaultColor: color,
    animationConfig: fanLikeAnimationConfig,
    colorList: const [
        [Colors.red, Colors.redAccent, Colors.deepOrange],
        [Colors.black26, Colors.black45, Colors.black87],
        [Colors.blue, Colors.blueAccent, Colors.blueGrey],
        [Colors.deepPurpleAccent, Colors.purpleAccent],
    ],
    buttonSize: 40,
    pieceHeight: 115,
    innerRadius: 80,
);
自定义动画
WheelColorPicker(
    onSelect: (Color newColor) {
        setState(() {
            color = newColor;
        });
    },
    behaviour: ButtonBehaviour.clickToOpen,
    defaultColor: color,
    animationConfig: const FanAnimationConfig(
        animationDurationInMillisecond: 1000,
        rayAnimationConfig: RayAnimationConfig(
            curve: Curves.easeInQuad,
            enabled: false,
        ),
        scaleAnimationConfig: ScaleAnimationConfig(
            curve: Curves.easeInOutCubic,
            enabled: true,
            animationStartDelay: 0,
            animationFinishDelay: 0.2,
        ),
        opacityAnimationConfig: OpacityAnimationConfig(
            curve: Curves.linear,
            enabled: true,
            animationStartDelay: 0.2,
            animationFinishDelay: 0,
        ),
        rotationAnimationConfig: RotationAnimationConfig(
            curve: Curves.easeInQuad,
            enabled: true,
            animationFinishDelay: 0.4
        )
    ),
    colorList: defaultAvailableColors,
    buttonSize: 40,
    pieceHeight: 25,
    innerRadius: 80,
)
使用 WheelColorPickerEntryContent
class ExampleUseOverlayOnlyState extends State<ExampleUseOverlayOnly> with SingleTickerProviderStateMixin {  
	Color color = Colors.redAccent;  
	late Widget overlayContent;  
	late AnimationController controller;  
	OverlayEntry? _overlayEntry;  
	bool isOpen = false;  

	[@override](/user/override)  
    void dispose() {  
		if (_overlayEntry != null) {  
			_overlayEntry!.remove();  
			_overlayEntry = null;  
		}  
		controller.dispose();  
		super.dispose();  
	}  

	void _showOverlay() async {  
		if (!isOpen) {  
			isOpen = true;  
			controller.forward();  
			OverlayState? overlayState = Overlay.of(context);  
			_overlayEntry = OverlayEntry(builder: (context) => overlayContent);  
			overlayState?.insert(_overlayEntry!);  
		}  
	}  

void _hideOverlay() async {  
	if (isOpen) {  
		isOpen = false;  
		controller.reverse();  
		Future.delayed(const Duration(milliseconds: 500)).then((_) {  
			if (_overlayEntry != null) {  
				_overlayEntry!.remove();  
				_overlayEntry = null;  
			}  
		});  
	}  
}  

[@override](/user/override)  
void initState() {  
	super.initState();  
	controller = AnimationController(vsync: this, duration:Duration(milliseconds: 500));  
	overlayContent = WheelOverlayEntryContent(  
		animationController: controller,  
		animationConfig: sunRayLikeAnimationConfig,  
		colors: simpleColors,  
		innerRadius: 200,  
		pieceHeight: 20,  
		pieceBorderSize: 5,  
		hideOverlay: _hideOverlay,  
		onSelect: (Color selectedColor) {  
			_hideOverlay();  
			setState(() {  
				color = selectedColor;  
			});  
		},  
	);  
}  

[@override](/user/override)  
Widget build(BuildContext context) {  
	return Container(  
		padding: const EdgeInsets.all(150),  
		child: Column(  
			children:[  
				Expanded(  
					flex:11,  
					child: Container(  
						height: 500,  
						width: 500,  
						decoration: BoxDecoration(  
							borderRadius: BorderRadius.circular(45),  
							border: Border.all(  
								width: 15,  
								color: color  
							)  
						),  
					)  
				),  
				const Expanded(flex:2, child: SizedBox()),  
				Expanded(
					flex:2,  
					child: MaterialButton(  
						color: Colors.blueAccent,  
						textColor: Colors.white,  
						child: const Text("Click to Open"),  
							onPressed: _showOverlay,  
						)  
					),  
				]  
			)  
		);  
	}  
}

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

1 回复

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


当然,下面是一个关于如何使用 flutter_color_picker_wheel 插件的示例代码。这个插件允许你在 Flutter 应用中使用一个颜色选择器轮盘来选择颜色。

首先,确保你已经将 flutter_color_picker_wheel 插件添加到你的 pubspec.yaml 文件中:

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

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

接下来,你可以在你的 Flutter 应用中使用这个插件。以下是一个完整的示例,展示如何在一个简单的应用中实现颜色选择器轮盘:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Color Picker Wheel Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ColorPickerDemo(),
    );
  }
}

class ColorPickerDemo extends StatefulWidget {
  @override
  _ColorPickerDemoState createState() => _ColorPickerDemoState();
}

class _ColorPickerDemoState extends State<ColorPickerDemo> {
  Color _selectedColor = Colors.blue;

  void _onColorChanged(Color newColor) {
    setState(() {
      _selectedColor = newColor;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Color Picker Wheel Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              width: 200,
              height: 200,
              color: _selectedColor,
              child: Center(
                child: Text(
                  '$_selectedColor',
                  style: TextStyle(color: Colors.white, fontSize: 24),
                ),
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                showDialog(
                  context: context,
                  builder: (context) => AlertDialog(
                    title: Text('Select Color'),
                    content: ColorPickerWheel(
                      color: _selectedColor,
                      onChanged: _onColorChanged,
                    ),
                    actions: <Widget>[
                      TextButton(
                        onPressed: () => Navigator.of(context).pop(),
                        child: Text('Cancel'),
                      ),
                      TextButton(
                        onPressed: () {
                          Navigator.of(context).pop();
                          // Optionally, you can perform additional actions here
                        },
                        child: Text('OK'),
                      ),
                    ],
                  ),
                );
              },
              child: Text('Pick Color'),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明

  1. 依赖导入:在 pubspec.yaml 中添加 flutter_color_picker_wheel 依赖。
  2. 主应用结构
    • MyApp:根组件,包含主题和主页 ColorPickerDemo
    • ColorPickerDemo:包含颜色选择逻辑和 UI。
  3. 颜色选择逻辑
    • _selectedColor:当前选中的颜色。
    • _onColorChanged:颜色变化回调,更新 _selectedColor
  4. UI 结构
    • 使用 ScaffoldAppBar 创建主页面布局。
    • 使用 CenterColumn 布局颜色展示和按钮。
    • Container 显示当前颜色和一个文本。
    • ElevatedButton 触发颜色选择器对话框。
    • AlertDialog 包含 ColorPickerWheel,并处理取消和确认按钮。

这样,你就可以在你的 Flutter 应用中使用 flutter_color_picker_wheel 插件来选择颜色了。

回到顶部