# WImage The `WImage` widget brings utility-first styling to images in Flutter, providing HTML-like semantics with Tailwind-inspired classes for sizing, object fitting, and decoration. - [Basic Usage](#basic-usage) - [Constructor](#constructor) - [Props](#props) - [Layout Modes](#layout-modes) - [Event Handling](#event-handling) - [State Variants](#state-variants) - [Styling Examples](#styling-examples) - [All Supported Classes](#all-supported-classes) - [Customizing Theme](#customizing-theme) - [Related Documentation](#related-documentation) ```dart WImage( src: 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e', alt: 'Forest landscape', className: 'w-full h-64 object-cover rounded-xl shadow-lg', ) ``` ## Basic Usage The `WImage` widget handles both network and asset images. For network images, simply provide the URL to the `src` property. For asset images, use the `asset://` prefix. ```dart // Network Image WImage( src: 'https://example.com/image.jpg', className: 'w-32 h-32 rounded-full', ) // Asset Image WImage( src: 'asset://assets/images/logo.png', className: 'w-12 h-12', ) ``` ## Constructor ```dart const WImage({ Key? key, String? src, ImageProvider? image, String? alt, String? className, Set? states, Widget? placeholder, ImageErrorBuilder? errorBuilder, ImageLoadingBuilder? loadingBuilder, }) ``` ## Props | Prop | Type | Default | Description | |:-----|:-----|:--------|:------------| | `src` | `String?` | `null` | Image source URL. Prefix with `asset://` for local assets. | | `image` | `ImageProvider?` | `null` | Direct ImageProvider (e.g., `NetworkImage`, `FileImage`). | | `alt` | `String?` | `null` | Alternative text for accessibility (semantic label). | | `className` | `String?` | `null` | Wind utility classes for sizing, fit, and decoration. | | `states` | `Set?` | `null` | Custom states for dynamic styling. | | `placeholder` | `Widget?` | `null` | Widget to show while the image is loading. | | `errorBuilder` | `ImageErrorBuilder?` | `null` | Custom builder for error handling. | | `loadingBuilder` | `ImageLoadingBuilder?` | `null` | Custom builder for loading indicators. | > [!NOTE] > Either `src` or `image` must be provided. If `src` is provided, it takes precedence in determining the `ImageProvider`. ## Layout Modes `WImage` supports common image layout utilities to control how the image is resized and fitted within its container. ### Object Fit Control how the image content should be resized to fit its container using `object-{fit}` classes. ```dart WImage( src: 'https://example.com/photo.jpg', className: 'w-64 h-64 object-contain bg-gray-200', ) ``` ### Aspect Ratio Ensure the image maintains a specific aspect ratio regardless of its content dimensions. ```dart WImage( src: 'https://example.com/banner.jpg', className: 'w-full aspect-video object-cover', ) ``` ## Event Handling `WImage` is a display-only widget and does not include built-in gesture handlers. To make an image interactive, wrap it in a `WAnchor` or `WButton`. ```dart WAnchor( onTap: () => print('Image clicked!'), child: WImage( src: 'https://example.com/avatar.jpg', className: 'w-12 h-12 rounded-full hover:opacity-80 transition-opacity', ), ) ``` ## State Variants You can use state prefixes to change the image's appearance based on parent state or custom state sets. ```dart WImage( src: 'https://example.com/photo.jpg', className: 'opacity-100 hover:opacity-75 transition-opacity duration-300', ) ``` ## Styling Examples ### Profile Avatars Creating circular avatars with borders and shadows. ```dart WImage( src: 'https://example.com/user.jpg', className: 'w-16 h-16 rounded-full border-2 border-white shadow-sm object-cover', ) ``` ### Rounded Cards Using specific border radius and shadow depth. ```dart WImage( src: 'https://example.com/thumbnail.jpg', className: 'w-full h-48 rounded-t-lg object-cover', ) ``` ## All Supported Classes | Category | Classes | |:---------|:--------| | Sizing | `w-{size}`, `h-{size}`, `max-w-{size}`, `min-h-{size}` | | Object Fit | `object-cover`, `object-contain`, `object-fill`, `object-none`, `object-scale-down` | | Aspect Ratio | `aspect-square`, `aspect-video`, `aspect-{ratio}` | | Borders | `border`, `border-{width}`, `border-{color}`, `rounded-{size}` | | Effects | `shadow-{size}`, `opacity-{n}` | ## Customizing Theme The default spacing, border radius, and colors used by `WImage` are controlled via `WindThemeData`. ```dart WindThemeData( borderRadius: { 'xl': 12.0, }, // WImage also respects the default spacing scale for w-* and h-* classes ) ``` ## Related Documentation - [WDiv](./w-div.md) - The fundamental layout container. - [WSvg](./w-svg.md) - For vector-based graphics. - [WIcon](./w-icon.md) - For system and custom icons.