# Binding the Flutter Theme Bind the Wind theme to your `MaterialApp` so your app's Material defaults and Wind's utility-first styles stay consistent. - [Dynamic Binding](#dynamic-binding) - [Static Binding](#static-binding) - [Customization Parameters](#customization-parameters) - [Related Documentation](#related-documentation) ```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. ## Related Documentation - [Get Started with Wind](installation.md) — install Wind and style your first widget. - [Dark Mode](../concepts/dark-mode.md) — how Wind handles brightness and color inversion. - [Colors](../customization/colors.md) — customize the palette `toThemeData` reads from. - [Font Family](../customization/font-family.md) — set the body and display fonts.