Flutter颜色渐变插件color_scale的使用

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

Flutter颜色渐变插件color_scale的使用

本项目旨在根据某个值使小部件的颜色动态变化,这种行为在Excel或Google Sheets中很常见,特别是在条件格式化中的颜色渐变。当你想通过颜色给呈现的值提供一个指示,并使数据消费更简单直观时,这个功能非常有用。

在这个视频中,我详细解释了如何在Flutter项目中使用颜色渐变插件。 https://www.youtube.com/watch?v=jqckPlHoRTI

特性

创建一个其颜色取决于值的小部件,这可以帮助用户识别报告中的数据,而无需阅读所有内容。

开始使用

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

dependencies:
  color_scale: ^0.0.4

使用方法

基础用法

ColorScaleWidget(
    value: 0, // 自定义你想要影响颜色的值
    minValue: -20,
    minColor: Colors.white,
    maxValue: 20,
    maxColor: Colors.black,
    child: Container(
        margin: EdgeInsets.all(5),
        child: Text('50% between black and white') // 文本内容
    )
)

使用分段

ClipRRect(
    borderRadius: const BorderRadius.all(Radius.circular(10)),
    child: SizedBox(
      width: 50,
      height: 50,
      child: ColorScaleStopsWidget(
        value: 0,  // 自定义你想要影响颜色的值
        colorStops: <double, Color>{
          -20: Colors.red,
          0: Colors.yellow,
          20: Colors.green,
        },
        child: Text('Add your widget here!'), // 添加你的子部件
      ),
    ),
),

完整示例代码

import 'dart:math';

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  ColorScaleTypeEnum colorScaleTypeEnum = ColorScaleTypeEnum.hsluv;

  [@override](/user/override)
  Widget build(BuildContext context) => MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Color Scale Demo',
        home: Scaffold(
          appBar: AppBar(
            title: const Text('Color scale'),
          ),
          body: SingleChildScrollView(
            child: Container(
              margin: const EdgeInsets.all(10),
              child: Column(
                children: [
                  DropdownButton<ColorScaleTypeEnum>(
                    value: colorScaleTypeEnum,
                    onChanged: (ColorScaleTypeEnum? newValue) {
                      setState(() {
                        colorScaleTypeEnum = newValue!;
                      });
                    },
                    items: ColorScaleTypeEnum.values
                        .map<DropdownMenuItem<ColorScaleTypeEnum>>(
                          (ColorScaleTypeEnum value) =>
                              DropdownMenuItem<ColorScaleTypeEnum>(
                            value: value,
                            child: Text(value.toString().split('.').last),
                          ),
                        )
                        .toList(),
                  ),
                  const SizedBox(
                    height: 20,
                  ),
                  const Text('Example with stops'),
                  StopsValueAndColorsWidget(
                    key: UniqueKey(),
                    colorStops: <double, Color>{
                      -5: Colors.red,
                      0: const Color(0xff808080),
                      5: Colors.green,
                    },
                    colorScaleTypeEnum: colorScaleTypeEnum,
                  ),
                  const Text('Example with slider'),
                  const ExampleWithSlider(
                      text: 'Slide between min and max color',
                      minColor: Colors.red,
                      maxColor: Colors.green),
                  const SizedBox(
                    height: 50,
                  ),
                  TestColorScale(
                    text: 'Colors from red to green',
                    values: const [-20, -15, -10, -5, 0, 5, 10, 15],
                    minValue: -20,
                    minColor: Colors.red,
                    maxValue: 20,
                    maxColor: Colors.green,
                    colorScaleTypeEnum: colorScaleTypeEnum,
                  ),
                  TestColorScale(
                    text: 'Colors from blue to green',
                    values: const [-20, -15, -10, -5, 0, 5, 10, 15],
                    minValue: -20,
                    minColor: Colors.blue,
                    maxValue: 20,
                    maxColor: Colors.green,
                    colorScaleTypeEnum: colorScaleTypeEnum,
                  ),
                  TestColorScale(
                    text: 'Colors from red to yellow',
                    values: const [-20, -15, -10, -5, 0, 5, 10, 15],
                    minValue: -20,
                    minColor: Colors.red,
                    maxValue: 20,
                    maxColor: Colors.yellow,
                    colorScaleTypeEnum: colorScaleTypeEnum,
                  ),
                  const Text('Childless example'),
                  ClipRRect(
                    borderRadius: const BorderRadius.all(Radius.circular(10)),
                    child: SizedBox(
                      width: 50,
                      height: 50,
                      child: ColorScaleWidget(
                        value: 0,
                        minValue: -20,
                        minColor: Colors.white,
                        maxValue: 20,
                        maxColor: Colors.black,
                        colorScaleTypeEnum: colorScaleTypeEnum,
                      ),
                    ),
                  ),
                  const Text('Childless example with stops'),
                  ClipRRect(
                    borderRadius: const BorderRadius.all(Radius.circular(10)),
                    child: SizedBox(
                      width: 50,
                      height: 50,
                      child: ColorScaleStopsWidget(
                        value: 0,
                        colorStops: <double, Color>{
                          -20: Colors.red,
                          0: Colors.yellow,
                          20: Colors.green,
                        },
                        colorScaleTypeEnum: colorScaleTypeEnum,
                      ),
                    ),
                  ),
                  Text('Example with border radius and padding'),
                  ColorScaleStopsWidget(
                    borderRadius: const BorderRadius.all(Radius.circular(10)),
                    padding: const EdgeInsets.all(10),
                    value: 0,
                    colorStops: <double, Color>{
                      -20: Colors.red,
                      0: Colors.orange,
                      20: Colors.green,
                    },
                    colorScaleTypeEnum: colorScaleTypeEnum,
                    child: Text('P'),
                  ),
                ],
              ),
            ),
          ),
        ),
      );
}

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

1 回复

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


当然,关于在Flutter中使用color_scale插件来实现颜色渐变,下面是一个简单的代码示例。不过需要注意的是,Flutter 生态系统中有多个处理颜色渐变的插件或方法,而color_scale这个特定的包名在 Flutter 的官方包中并不常见。为了示范,我将使用 Flutter 内置的功能来实现颜色渐变,因为 Flutter 本身已经提供了强大的颜色处理能力。

如果你确实在寻找一个名为color_scale的特定插件,并且它存在于某个非官方的 Flutter 仓库中,你可能需要查找该插件的文档来获取确切的使用方法。不过,以下示例将展示如何使用 Flutter 内置功能来实现颜色渐变:

使用 Flutter 内置功能实现颜色渐变

  1. 创建一个 Flutter 项目(如果你还没有项目的话)。

  2. pubspec.yaml文件中添加依赖(对于内置功能,这一步是可选的,因为颜色处理是 Flutter 框架的一部分)。

  3. main.dart文件中编写代码

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Color Gradient Demo'),
        ),
        body: Center(
          child: Container(
            width: 300,
            height: 300,
            decoration: BoxDecoration(
              gradient: LinearGradient(
                colors: [Colors.blue, Colors.red], // 从蓝色渐变到红色
                begin: Alignment.topLeft,
                end: Alignment.bottomRight,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

解释

  • LinearGradient:用于创建一个线性渐变。你可以指定开始和结束的对齐方式(例如,左上角到右下角),以及渐变中使用的颜色列表。
  • colors:颜色列表,定义了渐变中使用的颜色。在这个例子中,我们使用了从蓝色到红色的渐变。
  • beginend:定义了渐变开始和结束的位置。在这个例子中,渐变从左上角开始,到右下角结束。

自定义颜色插值

如果你需要更复杂的颜色插值或渐变,可以使用Color.lerp方法在两个颜色之间创建平滑过渡,或者结合Shader类进行更高级的自定义。

注意事项

  • 如果确实存在一个名为color_scale的插件,并且你需要使用它,请确保已经正确添加到你的项目中,并查阅该插件的官方文档了解如何使用。
  • Flutter 内置的颜色处理功能已经非常强大,足以满足大多数需求。

希望这个示例对你有所帮助!如果你有任何其他问题或需要进一步的帮助,请随时提问。

回到顶部