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

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

Pick_Color简介

Pick_Color 插件允许您从图片中采样特定的颜色,并通过在图片区域上拖动来获取其十六进制颜色代码。

pick_color

添加依赖

pubspec.yaml 文件中添加 pick_color 依赖:

dependencies:
  pick_color: any

使用方法

以下是一个完整的示例代码,展示了如何使用 pick_color 插件来实现颜色选择功能:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ImagePickerScreen(),
    );
  }
}

class ImagePickerScreen extends StatefulWidget {
  [@override](/user/override)
  _ImagePickerScreenState createState() => _ImagePickerScreenState();
}

class _ImagePickerScreenState extends State<ImagePickerScreen> {
  // 加载图片
  Image image = Image.asset(
    "assets/c.jpg", // 替换为您自己的图片路径
    height: 300,
  );

  // 存储选中的颜色和响应
  Color? color;
  PickerResponse? userResponse;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          children: [
            // 颜色选择器
            ColorPicker(
              child: image, // 您的图片小部件
              showMarker: true, // 显示标记
              onChanged: (response) {
                setState(() {
                  userResponse = response; // 保存响应
                  this.color = response.selectionColor; // 保存选中的颜色
                });
              },
            ),
            const SizedBox(height: 20),

            // 显示选中的颜色
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                children: [
                  const Text(
                    "选中的颜色  :-",
                    style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
                  ),
                  const SizedBox(width: 10),
                  Container(
                    width: 40,
                    height: 40,
                    decoration: BoxDecoration(
                      color: userResponse?.selectionColor ?? Colors.red, // 显示选中的颜色
                      border: Border.all(color: Colors.black, width: 1), // 边框
                      borderRadius: BorderRadius.circular(20), // 圆角
                    ),
                  )
                ],
              ),
            ),
            const SizedBox(height: 20),

            // 显示十六进制颜色代码
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                children: [
                  Text(
                    "十六进制代码  :- ${userResponse?.hexCode ?? ""}",
                    style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
                  ),
                ],
              ),
            ),

            // 显示红色通道值
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                children: [
                  Text(
                    "红色  :- ${userResponse?.redScale ?? ""}",
                    style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
                  ),
                ],
              ),
            ),

            // 显示绿色通道值
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                children: [
                  Text(
                    "绿色  :- ${userResponse?.greenScale ?? ""}",
                    style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
                  ),
                ],
              ),
            ),

            // 显示蓝色通道值
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                children: [
                  Text(
                    "蓝色  :- ${userResponse?.blueScale ?? ""}",
                    style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用pick_color插件来实现颜色选择器的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  pick_color: ^x.y.z  # 请将 x.y.z 替换为当前最新版本号

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

接下来,在你的Flutter项目中,你可以使用PickColor组件来显示颜色选择器。以下是一个完整的示例代码,展示如何在按钮点击时显示颜色选择器并将选择的颜色显示在屏幕上。

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

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

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

class ColorPickerScreen extends StatefulWidget {
  @override
  _ColorPickerScreenState createState() => _ColorPickerScreenState();
}

class _ColorPickerScreenState extends State<ColorPickerScreen> {
  Color selectedColor = Colors.white;

  void _pickColor() async {
    final Color? newColor = await PickColor.showDialog(
      context: context,
      title: 'Pick a Color',
      initialColor: selectedColor,
      enableAlpha: true,  // 是否启用透明度选择
      enableBrightness: true,  // 是否启用亮度滑块
      colorPickerWidth: 300,  // 颜色选择器对话框的宽度
      colorPickerHeight: 400,  // 颜色选择器对话框的高度
      pickerAreaPadding: const EdgeInsets.all(16.0),  // 颜色选择器区域的内边距
    );

    if (newColor != null) {
      setState(() {
        selectedColor = newColor;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Color Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              width: 100,
              height: 100,
              color: selectedColor,
              child: Center(
                child: Text(
                  'Selected Color',
                  style: TextStyle(color: selectedColor.contrastColor),
                ),
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pickColor,
              child: Text('Pick Color'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. MyApp是应用程序的根组件,它设置了应用程序的主题和主页。
  2. ColorPickerScreen是一个有状态的组件,它包含一个颜色变量selectedColor,用于存储用户选择的颜色。
  3. _pickColor方法是一个异步方法,它调用PickColor.showDialog来显示颜色选择器对话框。当用户选择颜色并点击确定时,newColor会包含选择的颜色,然后更新selectedColor的状态。
  4. build方法返回一个包含颜色方块和按钮的UI,颜色方块显示当前选择的颜色,按钮用于打开颜色选择器对话框。

你可以根据需要进一步定制颜色选择器的行为,比如禁用透明度选择或亮度滑块,或者调整对话框的尺寸和内边距。

回到顶部