search ESC

Searching…

No results for "".

Type at least 2 characters to search.

Docs

Context Extensions

Overview

Wind provides a set of ergonomic extensions on BuildContext to make accessing theme data, responsive breakpoints, and styling helpers as concise as possible. Instead of verbose provider lookups, you can access the entire Wind ecosystem directly from the context.

Theme Extensions

These extensions provide direct access to the WindTheme configuration and its underlying data.

Theme Control

Use windTheme to interact with the theme controller, typically for toggling between light and dark modes.

// Toggle the current theme
context.windTheme.toggleTheme();

// Set a specific brightness
context.windTheme.setBrightness(Brightness.dark);

Theme Data

Access the raw WindThemeData or specific properties like colors and brightness.

// Access the full theme data object
final theme = context.windThemeData;

// Quick access to the colors map
final primary = context.windColors['blue'];

// Check current brightness state
if (context.windIsDark) {
  // Apply dark mode logic
}

Responsive Extensions

Responsive extensions allow you to make layout decisions in your widget tree based on the current screen size and defined breakpoints.

Breakpoint Shortcuts

Quickly determine the current device category. These are based on your theme's screens configuration (defaults to Tailwind breakpoints).

if (context.wIsMobile) {
  return MobileLayout(); // < md
}

if (context.wIsTablet) {
  return TabletLayout(); // >= md && < lg
}

if (context.wIsDesktop) {
  return DesktopLayout(); // >= lg
}

Active Breakpoint

You can also retrieve the exact name of the active breakpoint.

WText('Current breakpoint: ${context.wActiveBreakpoint}');

Helper Extensions

These extensions are shorthand for Wind's global helper functions, allowing you to resolve specific values from the theme without passing the context manually.

Colors and Spacing

Resolve colors and spacing values based on your theme's unit scale.

// Get 'red-500' from the theme
final alertColor = context.wColorExt('red', shade: 500);

// Get 4 units of spacing (4 * baseSpacingUnit)
final padding = context.wSpacingExt(4);

Typography and Styling

Directly resolve font properties or even parse full class strings into a WindStyle object.

final weight = context.wFontWeightExt('bold');
final size = context.wFontSizeExt('lg');

// Parse a class string manually
final style = context.wStyleExt('p-4 bg-blue-500 rounded-lg');

API Reference

Property / Method Returns Description
windTheme WindThemeController Access the controller for toggling or updating the theme.
windThemeData WindThemeData Access the read-only theme configuration.
windColors Map Returns the full color palette from the theme.
windScreens Map Returns the breakpoint map (e.g., md: 768).
windBrightness Brightness Returns the current theme brightness (light or dark).
windIsDark bool Convenience getter for brightness == Brightness.dark.
wActiveBreakpoint String Returns the name of the currently active breakpoint.
wIsMobile bool Returns true if screen width is less than md.
wIsTablet bool Returns true if screen width is between md and lg.
wIsDesktop bool Returns true if screen width is lg or larger.
wColorExt(name, {shade}) Color? Resolves a theme color by name and optional shade.
wSpacingExt(multiplier) double Returns spacing calculated by multiplier * baseSpacingUnit.
wFontSizeExt(name) double? Returns the font size value for a key (e.g., xl).
wFontWeightExt(name) FontWeight? Returns the font weight for a key (e.g., bold).
wScreenIsExt(name) bool Checks if a specific breakpoint is currently active.
wStyleExt(className) WindStyle Parses a utility string into a WindStyle object.

Common Patterns

Conditional Layouts

Using responsive extensions to change widget parameters.

WDiv(
  className: 'bg-white rounded-lg',
  // Use extension to adjust padding dynamically in logic
  child: Padding(
    padding: EdgeInsets.all(context.wIsMobile ? 12 : 24),
    child: Content(),
  ),
)

Manual Style Resolution

Sometimes you need to apply Wind styles to standard Flutter widgets that don't support className.

final style = context.wStyleExt('text-blue-600 font-bold italic');

return Text(
  'Direct Styling',
  style: style.textStyle,
);

Theme Toggling

Implementing a theme switcher is trivial with the windTheme extension.

IconButton(
  icon: Icon(context.windIsDark ? Icons.light_mode : Icons.dark_mode),
  onPressed: () => context.windTheme.toggleTheme(),
)