A Flutter styling system that separates style definitions from widget structure using a composable, type-safe API.
Mix is a styling system for Flutter that separates style definitions from widget structure. It solves problems like style duplication, tight coupling of style logic within build methods, and lack of conditional styling by providing a composable, type-safe API for defining and applying styles. It enables developers to write maintainable styling code that can adapt based on interactions and context.
Flutter developers building medium to large-scale applications who need consistent, reusable, and maintainable styling solutions. It's particularly useful for teams dealing with design systems, complex UI states, or conditional styling requirements.
Developers choose Mix over Flutter's built-in styling because it decouples style logic from widgets, reduces duplication, and provides first-class support for conditional variants (like hover, dark mode, breakpoints) without boilerplate. Its composable, token-based approach ensures consistency and reusability across the app.
A styling system for Flutter
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
The fluent, chainable API allows merging and overriding attributes, enabling complex styles from simple, reusable pieces, as shown in the Styling API examples.
Built-in variants like onHovered, onDark, and onBreakpoint let you adapt styles conditionally in one place, reducing boilerplate for interactions and context.
Tokens for colors and spacing provided via MixScope ensure consistent theming across the app, as demonstrated in the Design Tokens guide.
Offers implicit, phase, and keyframe animations tied directly to style properties, making it easy to add smooth transitions without extra widget layers.
Requires Flutter 3.41.0+ and Dart SDK 3.11.0+, which can be a barrier for legacy projects or teams on stable channels.
Full functionality relies on companion packages like mix_annotations and mix_generator, adding initial setup overhead compared to Flutter's built-in styling.
Integrating Mix into an established codebase requires refactoring styles away from widget logic, which can be time-consuming and error-prone.