# WText A utility-first text component that translates Tailwind-like class strings into optimized Flutter typography. - [Basic Usage](#basic-usage) - [Constructor](#constructor) - [Props](#props) - [Runtime-Dynamic Colors](#runtime-dynamic-colors) - [Typography Styling](#typography-styling) - [State Variants](#state-variants) - [Styling Examples](#styling-examples) - [All Supported Classes](#all-supported-classes) - [Customizing Theme](#customizing-theme) - [Related Documentation](#related-documentation) ```dart WText( 'Design is not just what it looks like and feels like.', className: 'text-2xl font-bold text-slate-900 text-center leading-tight', ) ``` ## Basic Usage The `WText` widget handles all text rendering in Wind. Unlike standard Flutter `Text` widgets, it supports direct styling via the `className` property, including responsive and state-based modifiers. ```dart WText( 'Utility-first styling for Flutter', className: 'text-lg text-blue-600 font-semibold italic p-4', ) ``` ## Constructor ```dart const WText( String data, { Key? key, String? className, WindStyle? style, TextStyle? textStyle, bool selectable = false, Set? states, Color? foregroundColor, }) ``` ## Props | Prop | Type | Default | Description | |:-----|:-----|:--------|:------------| | `data` | `String` | `required` | The text string to display. | | `className` | `String?` | `null` | Tailwind-like utility classes. | | `style` | `WindStyle?` | `null` | Explicit WindStyle object as a base. | | `textStyle` | `TextStyle?` | `null` | Standard Flutter TextStyle to merge (className takes precedence). | | `selectable` | `bool` | `false` | Whether the text should be selectable (renders `SelectableText`). | | `states` | `Set?` | `null` | Custom states for dynamic styling (e.g., 'loading'). | | `foregroundColor` | `Color?` | `null` | Inline text color for runtime-dynamic values. Overrides any `text-*` / `dark:text-*` from `className`. See [Runtime-Dynamic Colors](#runtime-dynamic-colors). | ## Runtime-Dynamic Colors Utility classes are for **design tokens** (`text-primary-500`, `text-red-500`). When the color is a **runtime value**, a user-picked brand color or a hex loaded from an API, use the `foregroundColor` prop instead of interpolating into `text-[#$hex]`. ```dart // Good: runtime-dynamic color via inline prop WText( 'Brand', foregroundColor: userBrandColor, className: 'text-lg font-bold', ) // Avoid: string interpolation bloats the parser cache, one entry per unique hex WText('Brand', className: 'text-lg font-bold text-[#${userBrandColor.hex}]') ``` Precedence: inline `foregroundColor` wins over any `text-*` / `dark:text-*` resolved from `className`. When `foregroundColor` is `null`, className behavior, including the `dark:` fallback, is unchanged. The inline color does not participate in the parser cache key. ## Typography Styling WText supports a wide range of typography utilities that map directly to Flutter's `TextStyle`. ### Alignment and Transform ```dart WText('CENTERED UPPERCASE', className: 'text-center uppercase') WText('capitalize me', className: 'capitalize') ``` ### Overflow and Clamping Handle long text gracefully using truncation or line clamping. ```dart WText( 'A very long text that will be truncated with an ellipsis after two lines.', className: 'line-clamp-2 text-gray-500', ) ``` ## State Variants Text colors and weights can react to states when provided via the `states` prop or when nested within state-aware widgets like `WButton`. ```dart WText( 'Hover me', className: 'text-gray-500 hover:text-blue-600 transition-colors', ) ``` ## Styling Examples ### Gradient and Opacity While standard text uses `text-{color}`, you can also apply opacity modifiers. ```dart WText( 'Faded Text', className: 'text-blue-500/50 font-medium', ) ``` ### Composition Pipeline WText uniquely supports layout utilities (padding, margin, alignment) by automatically wrapping the text in the necessary layout widgets. ```dart WText( 'Alert Message', className: 'bg-red-100 text-red-700 p-4 rounded-lg border border-red-200', ) ``` ## All Supported Classes | Category | Classes | |:---------|:--------| | **Font Size** | `text-xs`, `text-sm`, `text-base`, `text-lg`, `text-xl` ... `text-6xl` | | **Font Weight** | `font-thin`, `font-light`, `font-normal`, `font-medium`, `font-bold` ... `font-black` | | **Color** | `text-{color}`, `text-{color}/{opacity}`, `text-[rgb(...)]` | | **Align** | `text-left`, `text-center`, `text-right`, `text-justify` | | **Transform** | `uppercase`, `lowercase`, `capitalize`, `normal-case` | | **Decoration** | `underline`, `line-through`, `no-underline` | | **Spacing** | `leading-{size}` (Line Height), `tracking-{size}` (Letter Spacing) | | **Overflow** | `truncate`, `text-ellipsis`, `line-clamp-{n}` | ## Customizing Theme Override default typography scales in your `WindThemeData`. ```dart WindThemeData( fontSizes: { 'huge': 120.0, }, fontWeights: { 'thick': FontWeight.w900, }, ) ``` ## Related Documentation - [WDiv](./w-div.md) - For complex layouts and containers. - [Typography Settings](../typography/font-size.md) - Deep dive into font sizes and scales. - [State Management](../core-concepts/state-management.md) - How `hover:` and `focus:` work.