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

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

faabul_color_picker 是一个用于Flutter应用的颜色选择器插件,由 Faabul Live Quizzes 开发和使用。该插件提供了一个简单易用的颜色选择对话框,允许用户从预定义的颜色中选择或自定义颜色。

Sample image

使用步骤

1. 基本使用

要显示颜色选择对话框并等待结果,请调用 showColorPickerDialog() 方法:

final color = await showColorPickerDialog(context: context);

2. 设置初始颜色

大多数情况下,您可能希望指定当前选中的颜色。如果允许用户取消选择颜色,可以将 allowUnselectButton 参数设置为 true

final color = await showColorPickerDialog(
  context: context,
  selected: selectedColor, // 当前选中的颜色
  allowUnselectButton: true, // 是否允许取消选择颜色
);

3. 自定义颜色

如果您希望使用自定义颜色,可以通过 colors 参数传递颜色列表:

final color = await showColorPickerDialog(
  context: context,
  selected: selectedColor,
  colors: [
    FaabulColorShades(color: Colors.red, shades: [
       Colors.red,
       Colors.redAccent,
    ]),
    FaabulColorShades(color: Colors.green, shades: [
       Colors.lightGreen,
       Colors.green,
       Colors.lightGreenAccent,
       Colors.greenAccent,
    ]),
    FaabulColorShades(color: Colors.blue, shades: [
        Colors.lightBlue,
        Colors.blue,
        Colors.lightBlueAccent,
        Colors.blueAccent,
    ]),
  ],
);

4. 其他公开类

  • FaabulColorPicker: 这是显示在 showColorPickerDialog 内部的控件。如果您想以不同的方式选择颜色,可以直接使用它。

  • FaabulColorButton: 这是一个用于表示单个 Color 的按钮控件。

  • FaabulColorSample: 这是一个用于展示 Color 的圆形控件。

完整示例代码

以下是一个完整的示例项目,展示了如何使用 faabul_color_picker 插件。

import 'package:faabul_color_picker/faabul_color_picker.dart';
import 'package:flutter/material.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',
      theme: ThemeData(colorSchemeSeed: Colors.purple, useMaterial3: true),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Color? _selectedColor;
  bool _allowUnselectButton = false;
  bool _customColors = false;

  static const _kCustomColors = [
    FaabulColorShades(color: Colors.red, shades: [
      Colors.red,
      Colors.redAccent,
    ]),
    FaabulColorShades(color: Colors.green, shades: [
      Colors.lightGreen,
      Colors.green,
      Colors.lightGreenAccent,
      Colors.greenAccent,
    ]),
    FaabulColorShades(color: Colors.blue, shades: [
      Colors.lightBlue,
      Colors.blue,
      Colors.lightBlueAccent,
      Colors.blueAccent,
    ]),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    final theme = ThemeData.from(
      colorScheme: ColorScheme.fromSeed(seedColor: _selectedColor ?? Colors.purple),
      useMaterial3: true,
    );
    return Theme(
      data: theme,
      child: Scaffold(
        backgroundColor: _selectedColor,
        body: Center(
          child: SizedBox(
            width: 400,
            height: 400,
            child: Card(
              child: Column(
                children: [
                  Expanded(
                    child: Padding(
                      padding: const EdgeInsets.all(16.0),
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                        children: [
                          if (_selectedColor == null)
                            const Text('No color selected')
                          else
                            Wrap(
                              spacing: 4,
                              children: [
                                const Text('Selected color:'),
                                FaabulColorSample(color: _selectedColor!),
                              ],
                            ),
                          FilledButton(
                            onPressed: _handlePickColor,
                            child: const Text('Pick a color'),
                          ),
                        ],
                      ),
                    ),
                  ),
                  SwitchListTile.adaptive(
                    title: const Text('Allow unselect button'),
                    value: _allowUnselectButton,
                    onChanged: (value) => setState(() => _allowUnselectButton = value),
                  ),
                  SwitchListTile.adaptive(
                    title: const Text('Custom colors'),
                    value: _customColors,
                    onChanged: (value) => setState(() => _customColors = value),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }

  Future<void> _handlePickColor() async {
    final color = await showColorPickerDialog(
      context: context,
      selected: _selectedColor,
      allowUnselectButton: _allowUnselectButton,
      colors: _customColors ? _kCustomColors : null,
    );
    if (!mounted) return;
    setState(() => _selectedColor = color);
  }
}

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

1 回复

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


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

首先,确保你的 Flutter 项目已经添加了 faabul_color_picker 依赖。你可以在 pubspec.yaml 文件中添加以下依赖:

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

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

接下来,你可以在你的 Dart 文件中使用 FaabulColorPicker 小部件。以下是一个完整的示例,展示了如何在一个简单的 Flutter 应用中使用颜色选择器:

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

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

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

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

class _ColorPickerDemoState extends State<ColorPickerDemo> {
  Color selectedColor = Colors.black;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('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),
            FaabulColorPicker(
              initialColor: selectedColor,
              onColorChanged: (Color color) {
                setState(() {
                  selectedColor = color;
                });
              },
              dialogTitle: 'Select Color',
              enableAlpha: true,
              pickerAreaHeightPercent: 0.8,
            ),
          ],
        ),
      ),
    );
  }
}

extension ColorHex on Color {
  String get toHex {
    return '#${(value & 0xFFFFFF).toRadixString(16).padLeft(6, '0').toUpperCase()}';
  }
}

解释

  1. 依赖添加:在 pubspec.yaml 中添加 faabul_color_picker 依赖。
  2. 导入包:在 Dart 文件中导入 faabul_color_picker 包。
  3. 主应用MyApp 类是应用的入口,设置了应用的主题和主页。
  4. 颜色选择器页面ColorPickerDemo 是一个有状态的部件,用于管理颜色选择器的状态。
  5. 颜色显示:一个 Container 用于显示当前选中的颜色及其十六进制代码。
  6. 颜色选择器FaabulColorPicker 小部件,配置初始颜色、颜色改变回调、对话框标题、是否启用透明度选择以及选择器区域的高度比例。
  7. 颜色扩展:一个 ColorHex 扩展方法,用于将 Color 对象转换为十六进制字符串。

运行这个示例应用,你将看到一个颜色块和一个颜色选择器。选择颜色后,颜色块和显示的十六进制代码将更新为所选颜色。

回到顶部