Skip to content

Binding the Flutter Theme

View raw .md

Bind the Wind theme to your MaterialApp so your app's Material defaults and Wind's utility-first styles stay consistent.

On this page
dart
MaterialApp(
  theme: WindTheme.toThemeData(
    primarySwatch: Colors.blue,
    bodyFontString: 'Roboto',
    displayFontString: 'Lobster',
  ),
)

Wind exposes two ways to produce a ThemeData:

  1. Dynamic Mode with WindTheme.toThemeCallback, which adapts to runtime changes such as light/dark mode transitions automatically.
  2. Static Mode with WindTheme.toThemeData, which is simpler to set up but requires manual updates when the brightness changes at runtime.

WindTheme is a static class, so you call these methods directly on the type. There is no theme-data object or builder to instantiate.

Dynamic Binding#

WindTheme.toThemeCallback updates the theme in response to runtime changes like light or dark mode toggling. It reads the brightness from the current BuildContext (or from the brightness you pass) and keeps the app in sync without manual intervention.

dart
class MyApp extends StatelessWidget {
  final Widget Function(BuildContext) appCallback;

  const MyApp({super.key, required this.appCallback});

  @override
  Widget build(BuildContext context) {
    return appCallback(context);
  }
}

void main() {
  runApp(MyApp(
    appCallback: (context) {
      return MaterialApp(
        theme: WindTheme.toThemeCallback(
          context,
          primarySwatch: Colors.blue,
          bodyFontString: 'Roboto',
          displayFontString: 'Lobster',
        ),
      );
    },
  ));
}

toThemeCallback resolves the brightness from the context (via setTypeFromContext) unless you pass an explicit brightness, then delegates to toThemeData. This makes it the right choice for dynamic theme transitions.

Static Binding#

If you do not need runtime adaptability, WindTheme.toThemeData is the simpler option. It applies the theme statically. When the brightness changes during runtime, update the theme manually by calling WindTheme.setType.

dart
void main() {
  runApp(MaterialApp(
    theme: WindTheme.toThemeData(
      primarySwatch: Colors.green,
      bodyFontString: 'Open Sans',
      displayFontString: 'Pacifico',
      backgroundColor: Colors.grey.shade200,
      brightness: Brightness.light,
    ),
  ));
}

To switch to dark mode at runtime:

dart
WindTheme.setType(Brightness.dark);

Calling setType regenerates Wind's darkened color set so the theme reflects the new brightness state.

Customization Parameters#

Both toThemeData and toThemeCallback accept the same named parameters to customize the Material theme:

Parameter Description Default Value
textTheme Custom TextTheme for the app's typography. Typography.material2021().englishLike
bodyFontString Font family for body text. WindTheme.getBodyFontString()
displayFontString Font family for display text (e.g. headings). WindTheme.getDisplayFontString()
primarySwatch Primary color swatch for the app. WindTheme.getMaterialColor('primary')
accentColor Secondary accent color. WindTheme.getColor('secondary')
cardColor Background color for cards. WindTheme.getColor('white')
backgroundColor Default background color for the app. WindTheme.getColor('gray', shade: 50)
errorColor Color used for error states. WindTheme.getColor('red')
brightness Overall brightness (light or dark mode). Current WindTheme type

The defaults above are the ones toThemeData applies. toThemeCallback differs on two: it defaults textTheme to Theme.of(context).textTheme and resolves brightness from the current BuildContext (unless you pass an explicit value), which is what makes it adapt to runtime light/dark changes.

Choose the method that best fits your application's needs.

  • Get Started with Wind — install Wind and style your first widget.
  • Dark Mode — how Wind handles brightness and color inversion.
  • Colors — customize the palette toThemeData reads from.
  • Font Family — set the body and display fonts.
esc

Search index did not load.

No match for "".

Try a class like rounded-lg or a widget like WButton.