Flutter应用颜色管理插件app_color的使用

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

Flutter应用颜色管理插件app_color的使用

app_color 是一个 Flutter 包,它扩展了 Color 类,可以用于创建、转换、比较颜色,并在用户界面中使用。此外,它还支持颜色编辑。

开始使用

在你的 Flutter 项目中添加依赖:

dependencies:
  app_color: ^1.0.1

示例代码

示例1:颜色转换和验证

void main() {
  // 使用十六进制字符串创建颜色
  assert(AppColor.fromHex('000000') == Color(0xFF000000));
  assert(AppColor.fromHex('#000000') == Color(0xFF000000));
  assert(AppColor.fromHex('FFFFFFFF') == Color(0xFFFFFFFF));
  assert(AppColor.fromHex('#B1000000') == Color(0xB1000000));
  assert(AppColor.fromHex('#B1000000').asHex == '#B1000000');

  // 使用 HSL 创建颜色
  assert(AppColor.fromHsl(164, 100, 88) == Color(0xFFC2FFEF));

  // 使用 XYZ 创建颜色
  assert(AppColor.fromXYZ(0.1669, 0.2293, 0.0434) == Color(0xFF659027));

  // 使用 CIELAB 创建颜色
  assert(AppColor.fromCielab(36.80, 55.20, -95.61) == Color(0xFF4832F7));
}

示例2:调整颜色亮度

void main() {
  // 将黑色变为白色,亮度增加100%
  assert(Color(0xFF000000).lighter(100) == Color(0xFFFFFFFF));
  assert(Color(0xFF000000).lx(100) == Color(0xFFFFFFFF));

  // 另一个亮度增加的例子
  assert(Color.fromARGB(255, 64, 64, 64).lighter(50) == Color.fromARGB(255, 192, 192, 192));
  assert(Color.fromARGB(255, 64, 64, 64).lx(50) == Color.fromARGB(255, 192, 192, 192));

  // 将白色变为灰色,亮度减少50%
  assert(Color(0xFF000000).darker(50) == Color(0xFF808080));
  assert(Color(0xFF000000).dx(50) == Color(0xFF808080));

  // 另一个亮度减少的例子
  assert(Color.fromARGB(255, 192, 192, 192).darker(25) == Color.fromARGB(255, 128, 128, 128));
  assert(Color.fromARGB(255, 192, 192, 192).dx(25) == Color.fromARGB(255, 128, 128, 128));
}

颜色主题

import 'package:app_color/theme.dart';
import 'package:flutter/material.dart';

void main() {
  ColorTheme.init(
    // 颜色配置
    background: const ColorThemeConfig(
      light: ThemeColors(
        primary: Colors.green,
      ),
      dark: ThemeColors(
        primary: Colors.red,
      ),
    ),
    text: const ColorThemeConfig(
      light: ThemeColors(
        light: Colors.white,
        dark: Colors.black,
      ),
      dark: ThemeColors(
        light: Colors.black,
        dark: Colors.white,
      ),
    ),
    colors: [
      const ColorThemeData(
        name: "xyz",
        config: ColorThemeConfig(
          light: ThemeColors(
            primary: Colors.white24,
          ),
          dark: ThemeColors(
            primary: Colors.black26,
          ),
        ),
      ),
      // 添加更多颜色主题作为自定义配置
    ],
    // 渐变配置
    backgroundGradient: GradientThemeConfig(
      light: ThemeGradients(
        primary: [
          Colors.white,
          Colors.grey.shade400,
        ],
      ),
      dark: ThemeGradients(
        primary: [
          Colors.black,
          Colors.grey.shade900,
        ],
      ),
    ),
    gradients: [
      GradientThemeData(
        name: "xyz",
        config: GradientThemeConfig(
          light: ThemeGradients(
            primary: [
              Colors.orange.shade400,
              Colors.red.shade400,
            ],
          ),
          dark: ThemeGradients(
            primary: [
              Colors.orange.shade900,
              Colors.red.shade900,
            ],
          ),
        ),
      ),
      // 添加更多渐变主题作为自定义配置
    ],
  );
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      themeMode: ThemeMode.light,
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      home: const Home(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Expanded(
            child: Container(
              color: context.backgroundColor.primary,
              width: double.infinity,
              alignment: Alignment.center,
              child: Container(
                width: 200,
                height: 200,
                color: context.colorOf("xyz").primary,
                alignment: Alignment.center,
                child: Text(
                  "SOLID COLOR",
                  style: TextStyle(
                    color: context.dark,
                  ),
                ),
              ),
            ),
          ),
          Expanded(
            child: Container(
              width: double.infinity,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                gradient: LinearGradient(
                  colors: context.backgroundGradient.primary ?? [],
                ),
              ),
              child: Container(
                width: 200,
                height: 200,
                alignment: Alignment.center,
                decoration: BoxDecoration(
                  gradient: LinearGradient(
                    colors: context.gradientOf("xyz").primary ?? [],
                  ),
                ),
                child: const Text(
                  "GRADIENT COLOR",
                  style: TextStyle(color: Colors.white),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

颜色定制

import 'package:app_color/color.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(
      home: Scaffold(
        backgroundColor: Colors.white,
        body: Column(
          children: [
            Expanded(
              child: Container(
                color: Colors.white,
                width: double.infinity,
                child: Center(
                  child: SizedBox(
                    width: 200,
                    height: 200,
                    child: Container(
                      color: Colors.white.dx(10),
                      alignment: Alignment.center,
                      child: const Text("DARK 10%"),
                    ),
                  ),
                ),
              ),
            ),
            Expanded(
              child: Container(
                color: Colors.black,
                width: double.infinity,
                child: Center(
                  child: SizedBox(
                    width: 200,
                    height: 200,
                    child: Container(
                      color: Colors.black.lx(10),
                      alignment: Alignment.center,
                      child: const Text(
                        "LIGHT 10%",
                        style: TextStyle(color: Colors.white),
                      ),
                    ),
                  ),
                ),
              ),
            ),
            Expanded(
              child: Row(
                children: [
                  Expanded(
                    child: Container(
                      color: Colors.green.shade400,
                      width: double.infinity,
                      child: Center(
                        child: AspectRatio(
                          aspectRatio: 1,
                          child: Container(
                            color: Colors.green.shade400.themeA(10),
                            margin: const EdgeInsets.all(32),
                            alignment: Alignment.center,
                            child: Text(
                              "AUTO 10%\nDETECT ON COLOR \nBRIGHTNESS",
                              textAlign: TextAlign.center,
                              style: TextStyle(
                                color: Colors.green.shade400.themeB(75),
                              ),
                            ),
                          ),
                        ),
                      ),
                    ),
                  ),
                  Expanded(
                    child: Container(
                      color: Colors.green.shade600,
                      width: double.infinity,
                      child: Center(
                        child: AspectRatio(
                          aspectRatio: 1,
                          child: Container(
                            color: Colors.green.shade600.themeA(10),
                            margin: const EdgeInsets.all(32),
                            alignment: Alignment.center,
                            child: Text(
                              "AUTO 10%\nDETECT ON COLOR \nBRIGHTNESS",
                              textAlign: TextAlign.center,
                              style: TextStyle(
                                color: Colors.green.shade600.themeB(75),
                              ),
                            ),
                          ),
                        ),
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter应用中,颜色管理是一个常见的需求,特别是当你需要在多个地方使用相同的颜色值时。app_color 是一个可以帮助你进行颜色管理的插件(尽管需要注意,app_color 并非官方或广泛知名的插件,这里我们假设它类似于一些常见的颜色管理插件,比如通过配置文件来管理颜色)。

以下是一个假设性的示例,展示如何使用一个类似 app_color 的插件来进行颜色管理。由于具体的 app_color 插件可能不存在或文档不全,这里将提供一个通用的方法,通过自定义的 Color Manager 类和 JSON 配置文件来实现类似的功能。

1. 创建颜色配置文件

首先,在项目的 assets 文件夹中创建一个 JSON 文件(例如 colors.json),用于存储颜色值:

{
  "primaryColor": "#FF6F00",
  "secondaryColor": "#00796B",
  "backgroundColor": "#FFFFFF",
  "textColor": "#000000"
}

2. 创建 Color Manager 类

接下来,创建一个 ColorManager 类来加载和提供颜色值:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class ColorManager {
  static Map<String, Color> colors = {};

  static Future<void> loadColors() async {
    // Load the JSON file from assets
    final String response = await rootBundle.loadString('assets/colors.json');
    final Map<String, dynamic> colorMap = jsonDecode(response);

    // Convert hex strings to Color objects
    colors = colorMap.mapValues((hex) => Color(int.parse(hex.substring(1), 16)));
  }

  static Color getColor(String key) {
    return colors[key] ?? Colors.transparent; // Default to transparent if key not found
  }
}

3. 在应用初始化时加载颜色

在应用的入口文件(如 main.dart)中,确保在应用启动时加载颜色:

import 'package:flutter/material.dart';
import 'color_manager.dart'; // Import your ColorManager class

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await ColorManager.loadColors(); // Load colors before running the app
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primaryColor: ColorManager.getColor('primaryColor'),
        // Use other colors as needed
      ),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Color Management Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'Primary Color Box',
              style: TextStyle(color: ColorManager.getColor('primaryColor')),
            ),
            Container(
              width: 100,
              height: 100,
              color: ColorManager.getColor('primaryColor'),
            ),
            SizedBox(height: 20),
            Text(
              'Secondary Color Box',
              style: TextStyle(color: ColorManager.getColor('secondaryColor')),
            ),
            Container(
              width: 100,
              height: 100,
              color: ColorManager.getColor('secondaryColor'),
            ),
          ],
        ),
      ),
    );
  }
}

总结

这个示例展示了如何通过 JSON 配置文件和自定义的 ColorManager 类来管理和使用颜色。你可以根据实际需求调整 JSON 文件的结构和 ColorManager 类的实现。如果 app_color 插件确实存在且有具体的用法,请参考其官方文档进行集成。

回到顶部