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

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

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

简介

circular_color_picker 是一个简单、优化且实用的包,用于在您的Flutter项目中添加HSV颜色选择器。它提供了圆形的颜色选择器,用户可以通过拖动选择器来选择不同的颜色。

示例图片

示例 1 示例 2
示例 1 示例 2

开始使用

1. 添加依赖

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

dependencies:
  circular_color_picker: <latest_version>

请将 <latest_version> 替换为最新的版本号。

2. 基本用法

您可以在需要的地方添加最小实现:

CircularColorPicker(
  radius: 100,
  onColorChange: (value) {
    // 在这里处理颜色变化
  },
)

3. 自定义选项

您可以自定义选择器的选项和选择器点的样式:

选择器选项
CircularColorPickerOptions(
  initialColor: const Color(0xffff0000), // 初始颜色
  showBackground: false, // 是否显示背景
  callOnChangeFunctionOnEnd: true, // 是否仅在拖动结束时调用回调
)
选择器点选项
PickerDotOptions(
  isInner: true, // 选择器点是否在内部
  radius: 24, // 选择器点的半径
  borderWidth: 5, // 边框宽度
  borderColor: Colors.black, // 边框颜色
  shadows: const [
    BoxShadow(
      color: Colors.black,
      spreadRadius: 0.5,
    ),
  ], // 阴影效果
)

完整示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 circular_color_picker

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Circular Color Picker Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Circular Color Picker Demo'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      initialIndex: 0,
      child: Scaffold(
        appBar: AppBar(
          title: Text(title),
          centerTitle: true,
          bottom: const TabBar(
            tabs: [
              Tab(icon: Icon(Icons.color_lens)),
              Tab(icon: Icon(Icons.colorize)),
            ],
          ),
        ),
        body: const TabBarView(
          physics: NeverScrollableScrollPhysics(),
          children: [
            FirstTab(),
            SecondTab(),
          ],
        ),
      ),
    );
  }
}

class FirstTab extends StatefulWidget {
  const FirstTab({Key? key}) : super(key: key);

  [@override](/user/override)
  State<FirstTab> createState() => _FirstTabState();
}

class _FirstTabState extends State<FirstTab> {
  final ValueNotifier<Color> _chosenColor = ValueNotifier(const Color(0xFFFF0000));

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Center(
          child: CircularColorPicker(
            radius: 130,
            pickerOptions: const CircularColorPickerOptions(showBackground: true),
            onColorChange: (value) {
              // 处理颜色变化
              _chosenColor.value = value;
            },
          ),
        ),
        Align(
          alignment: Alignment.topCenter,
          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: ValueListenableBuilder<Color>(
              valueListenable: _chosenColor,
              builder: (context, value, child) => Container(
                height: 20,
                width: 40,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(6),
                  color: value,
                ),
              ),
            ),
          ),
        ),
      ],
    );
  }
}

class SecondTab extends StatefulWidget {
  const SecondTab({Key? key}) : super(key: key);

  [@override](/user/override)
  State<SecondTab> createState() => _SecondTabState();
}

class _SecondTabState extends State<SecondTab> {
  late final ValueNotifier<Color> _chosenColor;

  [@override](/user/override)
  void initState() {
    super.initState();
    _chosenColor = ValueNotifier(const Color(0xFFFF0000));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      color: Colors.black87,
      child: Stack(
        children: [
          Center(
            child: ClipRRect(
              borderRadius: BorderRadius.circular(12),
              child: CircularColorPicker(
                radius: 100,
                pickerOptions: const CircularColorPickerOptions(
                  showBackground: true,
                  backgroundColor: Colors.white54,
                  callOnChangeFunctionOnEnd: false,
                ),
                pickerDotOptions: const PickerDotOptions(
                  isInner: false,
                  borderWidth: 8,
                  shadows: [],
                ),
                onColorChange: (value) {
                  // 处理颜色变化
                  _chosenColor.value = value;
                },
              ),
            ),
          ),
          Align(
            alignment: Alignment.topCenter,
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: ValueListenableBuilder<Color>(
                valueListenable: _chosenColor,
                builder: (context, value, child) => Container(
                  height: 20,
                  width: 40,
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(6),
                    color: value,
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用circular_color_picker插件的详细代码案例。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  circular_color_picker: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中(例如main.dart),导入circular_color_picker

import 'package:circular_color_picker/circular_color_picker.dart';

3. 使用颜色选择器

下面是一个完整的示例,展示如何在一个简单的Flutter应用中集成和使用circular_color_picker

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Color selectedColor = Colors.black;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Circular Color Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 显示选中的颜色
            Container(
              width: 100,
              height: 100,
              color: selectedColor,
              child: Center(
                child: Text(
                  '${selectedColor.toHex()}',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            ),
            SizedBox(height: 20),
            // 颜色选择器
            CircularColorPicker(
              color: selectedColor,
              onColorChange: (color) {
                setState(() {
                  selectedColor = color;
                });
              },
              width: 300,
              height: 300,
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 添加依赖:在pubspec.yaml文件中添加circular_color_picker依赖。
  2. 导入插件:在Dart文件中导入circular_color_picker包。
  3. 创建应用:创建一个简单的Flutter应用,包含一个CircularColorPicker组件。
  4. 显示选中的颜色:使用Container组件显示选中的颜色,并在其中显示颜色的十六进制代码。
  5. 颜色选择器:使用CircularColorPicker组件来选择颜色,并通过onColorChange回调更新状态。

这个示例展示了如何使用circular_color_picker插件来创建一个简单的颜色选择器应用。你可以根据需要进一步自定义和扩展这个示例。

回到顶部