Getting Started
Installation
Just run the following command to add Mix in your project.
flutter pub add mix
Usage
Mix provides a lot of different benefits on how you can define and organize your design tokens, and no documentation would be complete without a syntax comparison between Mix vs. Without Mix.
Let's go ahead and take a look at the code. Don't worry about understanding each line, the docs will go into more detail about each item.
With Mix
class CustomMixWidget extends StatelessWidget { const CustomMixWidget({Key? key}) : super(key: key);
Widget build(BuildContext context) { final style = Mix( height(100), animated(), marginY(10), elevation(10), rounded(10), bgColor($primary), textStyle($button), textColor($onPrimary), hover( elevation(2), padding(20), bgColor($secondary), textColor($onSecondary), ), ); return Box( mix: style, child: const TextMix('Custom Widget'), ); }}
Comparison without Mix
class CustomWidget extends StatefulWidget { const CustomWidget({ Key? key, }) : super(key: key);
_CustomWidgetState createState() => _CustomWidgetState();}
class _CustomWidgetState extends State<CustomWidget> { bool _isHover = false; void initState() { super.initState(); }
Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme;
return MouseRegion( onEnter: (event) { setState(() => _isHover = true); }, onExit: (event) { setState(() => _isHover = false); }, child: Material( elevation: _isHover ? 2 : 10, child: AnimatedContainer( curve: Curves.linear, duration: const Duration(milliseconds: 100), height: 100, padding: _isHover ? const EdgeInsets.all(20) : const EdgeInsets.all(0), margin: const EdgeInsets.symmetric(vertical: 10), decoration: BoxDecoration( color: _isHover ? colorScheme.secondary : colorScheme.primary, borderRadius: BorderRadius.circular(10), ), child: Text( 'Custom Widget', style: Theme.of(context).textTheme.button?.copyWith( color: _isHover ? colorScheme.onSecondary : colorScheme.onPrimary, ), ), ), ), ); }}