Flutter颜色选择器插件flutter_color_picker_wheel的使用
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'),
),
],
),
),
);
}
}
代码说明
- 依赖导入:在
pubspec.yaml
中添加flutter_color_picker_wheel
依赖。 - 主应用结构:
MyApp
:根组件,包含主题和主页ColorPickerDemo
。ColorPickerDemo
:包含颜色选择逻辑和 UI。
- 颜色选择逻辑:
_selectedColor
:当前选中的颜色。_onColorChanged
:颜色变化回调,更新_selectedColor
。
- UI 结构:
- 使用
Scaffold
和AppBar
创建主页面布局。 - 使用
Center
和Column
布局颜色展示和按钮。 Container
显示当前颜色和一个文本。ElevatedButton
触发颜色选择器对话框。AlertDialog
包含ColorPickerWheel
,并处理取消和确认按钮。
- 使用
这样,你就可以在你的 Flutter 应用中使用 flutter_color_picker_wheel
插件来选择颜色了。