# Color Helpers - [Resolving Colors](#resolving-colors) - [Hex Colors](#hex-colors) - [Opacity Handling](#opacity-handling) - [Material Color Inversion](#material-color-inversion) - [Context Extensions](#context-extensions) Wind provides a set of utility functions and extensions to help you resolve and manipulate colors programmatically, staying consistent with your theme. ## Resolving Colors The `wColor` function is the primary way to resolve colors from the active `WindTheme`. It handles color names, shades, and even automatic dark mode overrides. ```dart Color? wColor( BuildContext context, String colorName, { int shade = 500, String? darkColorName, int darkShade = 500, }) ``` ### Basic Usage You can resolve a color by its name and shade: ```dart // Resolves blue-500 from the theme final primary = wColor(context, 'blue'); // Resolves red-600 final error = wColor(context, 'red', shade: 600); // Resolves using color-shade string format final danger = wColor(context, 'rose-500'); ``` ### Dark Mode Overrides You can specify a different color or shade to be used when the theme is in dark mode: ```dart final background = wColor( context, 'slate-50', darkColorName: 'slate-900', ); ``` ## Hex Colors The `hexToColor` function converts various hex string formats into Flutter `Color` objects. ```dart Color hexToColor(String code) ``` ### Supported Formats | Format | Example | Result | |:-------|:--------|:-------| | 3-digit Hex | `#RGB` | `#RRGGBB` | | 4-digit Hex | `#ARGB` | `#AARRGGBB` | | 6-digit Hex | `#RRGGBB` | `0xFFRRGGBB` | | 8-digit Hex | `#AARRGGBB` | `0xAARRGGBB` | > [!NOTE] > The hash (`#`) prefix is optional. `hexToColor('FF0000')` works identically to `hexToColor('#FF0000')`. ## Opacity Handling Wind includes utilities for parsing Tailwind-style opacity modifiers and applying them to colors. ### Parsing Opacity The `parseColorOpacity` function splits a class string into the color part and its opacity factor. ```dart // Returns (colorPart: 'blue-500', opacity: 0.5) final result = parseColorOpacity('blue-500/50'); // Supports arbitrary values: (colorPart: 'red-500', opacity: 0.75) final arbitrary = parseColorOpacity('red-500/[75]'); ``` ### Applying Opacity Use `applyOpacity` to programmatically adjust the alpha channel of any `Color`. ```dart Color applyOpacity(Color color, double opacity) ``` ```dart final semiTransparent = applyOpacity(Colors.blue, 0.5); ``` ## Material Color Inversion The `invertMaterialColor` utility is used by the theme engine to automatically generate dark mode variants by swapping shades (e.g., 50 ↔ 900, 100 ↔ 800). ```dart MaterialColor invertMaterialColor(MaterialColor color) ``` ## Context Extensions For more ergonomic access, Wind extends `BuildContext` with several color-related shortcuts. ### `context.windColors` Returns the full color map from the current `WindThemeData`. ```dart final redPalette = context.windColors['red']; ``` ### `context.wColorExt` A shortcut for calling `wColor(context, ...)`. ```dart final primary = context.wColorExt('blue', shade: 600); ``` ### `context.windIsDark` Returns a boolean indicating if the current theme brightness is `Brightness.dark`. ```dart if (context.windIsDark) { // Do something specific for dark mode } ```