tailwindcss_build 0.4.2
Plugins developed based on tailwind css
TailwindCSS Build for Flutter
Transform your Flutter development with the power and elegance of Tailwind CSS utility classes through our revolutionary Builder Pattern architecture.
🚨 Pre-1.0.0 Notice
Important: This package is in active development toward version 1.0.0. We may introduce breaking changes, deprecate APIs, or make architectural improvements to provide the best possible solution.
Current Status: The builder pattern implementations (ContainerBuilder, TextBuilder, FlexBuilder) in v0.4.0 are production-ready and represent the future direction of this library.
✨ Why TailwindCSS Build?
🎯 Before vs After Comparison
🔥 Simple Button Example
Traditional Flutter Way (Verbose):
GestureDetector(
onTap: () => print('Button clicked!'),
child: Container(
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
decoration: BoxDecoration(
color: Color(0xFF2563EB), // blue-600
borderRadius: BorderRadius.circular(8),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
blurRadius: 4,
offset: Offset(0, 2),
),
],
),
child: Text(
'Click Me',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w500,
),
),
),
)
TailwindCSS Build Way (Elegant):
Text('Click Me')
.asText()
.textWhite()
.fontMedium()
.asContainer()
.px6()
.py3()
.bgBlue600()
.r8()
.shadow()
.onTap(() => print('Button clicked!'))
Result: ✨ 70% less code, 100% more readable!
🎨 Card Layout Example
Traditional Flutter Way:
Container(
padding: EdgeInsets.all(24),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
blurRadius: 10,
offset: Offset(0, 4),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Card Title',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Color(0xFF111827), // gray-900
),
),
SizedBox(height: 8),
Text(
'Card content goes here...',
style: TextStyle(
fontSize: 16,
color: Color(0xFF4B5563), // gray-600
),
),
],
),
)
TailwindCSS Build Way:
[
Text('Card Title')
.asText()
.textXl()
.fontBold()
.textGray900()
.build(),
SizedBox(height: 8),
Text('Card content goes here...')
.asText()
.textBase()
.textGray600()
.build(),
].asFlex()
.flexCol()
.itemsStart()
.asContainer()
.bgWhite()
.p6()
.r12()
.shadowMd()
.build()
Result: ✨ Self-documenting code with visual clarity!
🔄 Complex Responsive Layout Example
Traditional Flutter Way:
Container(
padding: EdgeInsets.all(16),
color: Color(0xFFF3F4F6), // gray-100
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
child: Container(
padding: EdgeInsets.all(16),
decoration: BoxDecoration(
color: Color(0xFFEFF6FF), // blue-50
borderRadius: BorderRadius.circular(8),
),
child: Text(
'Left Panel',
style: TextStyle(
color: Color(0xFF1E40AF), // blue-700
fontWeight: FontWeight.w500,
),
),
),
),
SizedBox(width: 16),
Expanded(
child: Container(
padding: EdgeInsets.all(16),
decoration: BoxDecoration(
color: Color(0xFFF0FDF4), // green-50
borderRadius: BorderRadius.circular(8),
),
child: Text(
'Right Panel',
style: TextStyle(
color: Color(0xFF15803D), // green-700
fontWeight: FontWeight.w500,
),
),
),
),
],
),
)
TailwindCSS Build Way:
[
Text('Left Panel')
.asText()
.textBlue700()
.fontMedium()
.asContainer()
.bgBlue50()
.p4()
.r8()
.wFull()
.build(),
Text('Right Panel')
.asText()
.textGreen700()
.fontMedium()
.asContainer()
.bgGreen50()
.p4()
.r8()
.wFull()
.build(),
].asFlex()
.flexRow()
.justifyBetween()
.itemsStretch()
.asContainer()
.bgGray100()
.p4()
.build()
Result: ✨ Visual code structure matches UI layout!
🏗️ Revolutionary Architecture
🎯 Builder Pattern Benefits
- 🚀 Performance: Single widget creation instead of nested containers
- 🔗 Chainable: Intuitive method chaining for complex styling
- 🛡️ Type Safe: Full compile-time checking with Flutter's type system
- 💾 Memory Efficient: Reduced widget tree depth and improved rendering
🧩 Three Core Builders
| Builder | Purpose | Usage |
|---|---|---|
| TextBuilder | Text styling & typography | Text('Hello').asText().textBlue600().fontBold().build() |
| ContainerBuilder | Layout, spacing & visual effects | .asContainer().px6().py3().bgWhite().r8().shadow().build() |
| FlexBuilder | Layout management (Row/Column) | [widgets].asFlex().flexRow().justifyCenter().asContainer().build() |
🚀 Quick Start
Installation
dependencies:
tailwindcss_build: ^0.4.2
Import
import 'package:tailwindcss_build/tailwindcss_build.dart';
Basic Usage Patterns
📝 Text Styling
// Basic text styling
Text('Hello World')
.asText()
.textBlue600() // Color
.textXl() // Size
.fontBold() // Weight
.build()
// From string directly
'Hello World'
.asText()
.textWhite()
.fontMedium()
.textCenter()
.build()
🎯 Container Styling
// Basic container
Text('Content')
.build()
.asContainer()
.px6() // Horizontal padding
.py3() // Vertical padding
.bgBlue600() // Background color
.r8() // Border radius
.shadow() // Drop shadow
.build()
// Direct from text builder
Text('Styled Text')
.asText()
.textWhite()
.fontMedium()
.asContainer() // Auto-builds text and wraps in container
.px4()
.py2()
.bgRed500()
.r6()
.build()
🔄 Flex Layouts
// Row layout
[
Text('Item 1').build(),
Text('Item 2').build(),
Text('Item 3').build(),
].asFlex()
.flexRow() // Direction
.justifyCenter() // Main axis alignment
.itemsCenter() // Cross axis alignment
.asContainer() // Convert to container for styling
.bgGray100()
.p4()
.r8()
.build()
// Column layout
[
Text('Title').build(),
Text('Subtitle').build(),
].asFlex()
.flexCol()
.itemsStart()
.asContainer()
.bgWhite()
.p6()
.shadowMd()
.build()
🎮 Interactive Elements
// Clickable button
Text('Click Me')
.asText()
.textWhite()
.fontMedium()
.asContainer()
.px6()
.py3()
.bgBlue600()
.r8()
.shadow()
.onTap(() {
print('Button clicked!');
})
// No manual GestureDetector needed!
🌐 Platform Support
✅ Fully Supported Platforms
This package supports all Flutter platforms:
- 📱 Android - Full support for mobile apps
- 🍎 iOS - Complete iOS compatibility
- 🌐 Web - Web application support
- 🖥️ Windows - Desktop Windows apps
- 🍎 macOS - Desktop macOS apps
- 🐧 Linux - Desktop Linux apps
🎯 Zero Configuration Required
Works out of the box on all platforms with no additional setup needed.
🎨 Complete Color System
🌈 All TailwindCSS Colors Available
Background Colors (21 color families)
// Basic colors
.bgWhite() .bgBlack() .bgTransparent()
// Gray family (50-950)
.bgGray50() .bgGray100() .bgGray200() ... .bgGray950()
// All color families with full ranges:
.bgSlate50() → .bgSlate950() // Slate
.bgZinc50() → .bgZinc950() // Zinc
.bgNeutral50() → .bgNeutral950() // Neutral
.bgStone50() → .bgStone950() // Stone
.bgRed50() → .bgRed950() // Red
.bgOrange50() → .bgOrange950() // Orange
.bgAmber50() → .bgAmber950() // Amber
.bgYellow50() → .bgYellow950() // Yellow
.bgLime50() → .bgLime950() // Lime
.bgGreen50() → .bgGreen950() // Green
.bgEmerald50() → .bgEmerald950() // Emerald
.bgTeal50() → .bgTeal950() // Teal
.bgCyan50() → .bgCyan950() // Cyan
.bgSky50() → .bgSky950() // Sky
.bgBlue50() → .bgBlue950() // Blue
.bgIndigo50() → .bgIndigo950() // Indigo
.bgViolet50() → .bgViolet950() // Violet
.bgPurple50() → .bgPurple950() // Purple
.bgFuchsia50() → .bgFuchsia950() // Fuchsia
.bgPink50() → .bgPink950() // Pink
.bgRose50() → .bgRose950() // Rose
Border Colors (All families)
// Default border (gray-200)
.border()
// Colored borders
.border().borderBlue500()
.border().borderRed300()
.border().borderGreen600()
// Custom border color
.border(color: Colors.purple)
// All border color families available:
.borderGray50() → .borderGray950()
.borderBlue50() → .borderBlue950()
.borderRed50() → .borderRed950()
// ... all 21 color families
📚 Advanced Examples
🏢 Dashboard Layout
[
// Header
Text('Dashboard')
.asText()
.text2xl()
.fontBold()
.textGray900()
.asContainer()
.px6()
.py4()
.bgWhite()
.borderB()
.borderGray200()
.build(),
// Content area
[
// Sidebar
[
Text('Navigation').build(),
Text('Menu Item 1').build(),
Text('Menu Item 2').build(),
].asFlex()
.flexCol()
.itemsStart()
.asContainer()
.bgGray50()
.p4()
.w64()
.build(),
// Main content
Text('Main Content Area')
.asContainer()
.bgWhite()
.p6()
.wFull()
.build(),
].asFlex()
.flexRow()
.itemsStretch()
.asContainer()
.hFull()
.build(),
].asFlex()
.flexCol()
.asContainer()
.hFull()
.bgGray100()
.build()
💳 Product Card
[
// Product image placeholder
Container(height: 200, color: Colors.grey[300]),
// Product info
[
Text('Product Name')
.asText()
.textLg()
.fontSemibold()
.textGray900()
.build(),
Text('\$29.99')
.asText()
.textXl()
.fontBold()
.textGreen600()
.build(),
Text('Product description goes here...')
.asText()
.textSm()
.textGray600()
.build(),
// Action buttons
[
Text('Add to Cart')
.asText()
.textWhite()
.fontMedium()
.asContainer()
.px4()
.py2()
.bgBlue600()
.r6()
.onTap(() {}),
Text('♡')
.asText()
.textGray400()
.asContainer()
.px3()
.py2()
.border()
.borderGray300()
.r6()
.onTap(() {}),
].asFlex()
.flexRow()
.justifyBetween()
.itemsCenter()
.build(),
].asFlex()
.flexCol()
.itemsStart()
.asContainer()
.p4()
.build(),
].asFlex()
.flexCol()
.asContainer()
.bgWhite()
.r12()
.shadowLg()
.build()
📱 Mobile-First Form
[
Text('Sign Up')
.asText()
.text2xl()
.fontBold()
.textCenter()
.textGray900()
.build(),
SizedBox(height: 24),
// Email input
TextFormField(
decoration: InputDecoration(
hintText: 'Enter your email',
border: OutlineInputBorder(),
),
).asContainer()
.px4()
.py2()
.bgWhite()
.border()
.borderGray300()
.r8()
.build(),
SizedBox(height: 16),
// Password input
TextFormField(
obscureText: true,
decoration: InputDecoration(
hintText: 'Enter your password',
border: OutlineInputBorder(),
),
).asContainer()
.px4()
.py2()
.bgWhite()
.border()
.borderGray300()
.r8()
.build(),
SizedBox(height: 24),
// Submit button
Text('Create Account')
.asText()
.textWhite()
.fontMedium()
.textCenter()
.asContainer()
.px6()
.py3()
.bgBlue600()
.r8()
.shadow()
.wFull()
.onTap(() {}),
].asFlex()
.flexCol()
.asContainer()
.bgGray50()
.p6()
.wFull()
.build()
🎯 Performance & Best Practices
⚡ Performance Benefits
Widget Tree Optimization
Before (Multiple nested containers):
Container
└── Container (padding)
└── Container (background)
└── Container (border)
└── Container (shadow)
└── Text
After (Single optimized container):
Container (all properties merged)
└── Text
Result: 🚀 5x fewer widgets, 3x faster rendering
🛡️ Type Safety & IntelliSense
// Full autocompletion support
Text('Hello')
.asText()
.text // ← Shows: textXs, textSm, textBase, textLg...
.font // ← Shows: fontThin, fontLight, fontNormal...
.asContainer()
.bg // ← Shows: bgWhite, bgBlack, bgGray50...
.p // ← Shows: p1, p2, p3, px2, py4...
📋 Recommended Chain Order
// Optimal chaining pattern
Text('Text')
.asText() // 1. Convert to text builder
.textXl() // 2. Text-specific styles
.fontBold() //
.textBlue600() //
.asContainer() // 3. Convert to container builder
.px6() // 4. Spacing
.py3() //
.bgWhite() // 5. Background
.border() // 6. Border
.borderGray300() //
.r8() // 7. Border radius
.shadow() // 8. Effects
.build() // 9. Final build
📖 API Reference
🏗️ Core Builders
TextBuilder Methods
// Text Sizes
.textXs() .textSm() .textBase() .textLg()
.textXl() .text2xl() .text3xl() .text4xl()
// Font Weights
.fontThin() .fontLight() .fontNormal() .fontMedium()
.fontSemibold() .fontBold() .fontExtrabold() .fontBlack()
// Text Colors (all TailwindCSS colors)
.textWhite() .textBlack() .textGray50() ... .textGray950()
.textRed50() ... .textRed950() // All color families
// Text Alignment
.textLeft() .textCenter() .textRight() .textJustify()
// Text Decoration
.underline() .lineThrough() .noUnderline()
.decorationSolid() .decorationDouble() .decorationDotted()
// Text Transform
.uppercase() .lowercase() .capitalize() .normalCase()
// Line Height & Letter Spacing
.leadingNone() .leadingTight() .leadingSnug() .leadingNormal()
.trackingTighter() .trackingTight() .trackingNormal() .trackingWide()
ContainerBuilder Methods
// Padding & Margin
.p0() .p1() .p2() .p3() .p4() ... .p96()
.px0() .py0() .pl0() .pr0() .pt0() .pb0() // Directional
.m0() .m1() .m2() ... .m96() // Margin variants
// Background Colors (all TailwindCSS colors)
.bgWhite() .bgBlack() .bgTransparent()
.bgGray50() ... .bgGray950() // All color families
// Border
.border() .borderT() .borderR() .borderB() .borderL()
.border0() .border2() .border4() .border8() // Widths
.borderSolid() .borderDashed() .borderDotted()
// Border Colors
.borderGray50() ... .borderGray950() // All color families
// Border Radius
.r0() .r1() .r2() .r3() .r4() .r6() .r8() .r12() .r16() .r20() .r24()
.rFull() .rNone()
// Shadows
.shadow() .shadowSm() .shadowMd() .shadowLg() .shadowXl() .shadow2xl()
.shadowInner() .shadowNone()
// Size
.w0() .w1() ... .w96() .wAuto() .wFull() .wScreen()
.h0() .h1() ... .h96() .hAuto() .hFull() .hScreen()
// Position
.position() .top0() .right0() .bottom0() .left0()
.inset0() // All directions
// Interactions
.onTap(() {}) .onDoubleTap(() {}) .onLongPress(() {})
FlexBuilder Methods
// Direction
.flexRow() .flexCol()
// Main Axis Alignment
.justifyStart() .justifyEnd() .justifyCenter()
.justifyBetween() .justifyAround() .justifyEvenly()
// Cross Axis Alignment
.itemsStart() .itemsEnd() .itemsCenter()
.itemsStretch() .itemsBaseline()
// Flex Properties
.flex1() .flex2() .flex3() // Fixed flex values
.flexAuto() .flexNone() .flex(int) // Custom flex
// Gap (spacing between children)
.gap1() .gap2() .gap3() .gap4() .gap6() .gap8() .gap12() .gap16()
.gap(double) // Custom gap value
🔗 Method Chaining
All builders support fluent method chaining:
Text('Hello')
.asText() // Convert to TextBuilder
.textBlue600() // Text styling
.fontBold() // More text styling
.asContainer() // Convert to ContainerBuilder
.px6() // Container styling
.py3() // More container styling
.bgWhite() // Background
.r8() // Border radius
.shadow() // Drop shadow
.onTap(() {}) // Interaction
// .build() called automatically when used
❓ FAQ
Why use builder pattern instead of direct widget styling?
- Performance: Creates single optimized widgets instead of nested containers
- Readability: Self-documenting code that reads like CSS classes
- Type Safety: Full compile-time checking and IntelliSense support
- Maintainability: Consistent API across all styling needs
- Memory Efficiency: Reduced widget tree depth
How does this compare to other Flutter styling solutions?
| Feature | TailwindCSS Build | Traditional Flutter | Other Packages |
|---|---|---|---|
| Code Length | 70% shorter | Verbose | Varies |
| Performance | Single widgets | Nested containers | Varies |
| Learning Curve | TailwindCSS knowledge | Flutter widgets | Package-specific |
| Type Safety | Full | Full | Varies |
| Customization | High | High | Limited |
Can I mix traditional Flutter widgets with builders?
Yes! Builders are designed to work seamlessly with existing Flutter code:
Column(
children: [
// Traditional Flutter
Container(
padding: EdgeInsets.all(16),
child: Text('Traditional'),
),
// TailwindCSS Build
Text('Modern')
.asText()
.textBlue600()
.asContainer()
.p4()
.bgGray100()
.build(),
],
)
Does this work with existing themes and styling?
Yes! The builders respect Flutter's theme system and can be combined with:
- Material Design themes
- Custom themes
- Dark/Light mode
- Custom color schemes
How do I handle responsive design?
Use Flutter's built-in responsive tools with builders:
LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 600) {
// Desktop layout
return [widgets].asFlex().flexRow().build();
} else {
// Mobile layout
return [widgets].asFlex().flexCol().build();
}
},
)
🔄 Migration Guide
From 0.3.x to 0.4.0
API Changes
// ❌ Old way (0.3.x)
Text('Hello').textBlue600().fontBold().asContainer().px4().bgWhite()
// ✅ New way (0.4.0)
Text('Hello')
.asText()
.textBlue600()
.fontBold()
.asContainer()
.px4()
.bgWhite()
.build()
// ❌ Old method names
.asTextBuilder() → .asText()
.asContainerBuilder() → .asContainer()
// ✅ Simplified interactions
// Old: GestureDetector(onTap: ..., child: widget)
// New: widget.onTap(...)
🧪 Testing & Debugging
🔍 Widget Inspector Integration
// Each builder creates a single, inspectable widget
Text('Debug Me')
.asText()
.textRed600()
.asContainer()
.px4()
.py2()
.bgRed100()
.border()
.borderRed500()
.r4()
.build() // ← Single Container widget in inspector tree
🎨 Custom Extensions
Brand Colors
// Define your brand colors
extension BrandColors on ContainerBuilder {
ContainerBuilder bgPrimary() => backgroundColor(Color(0xFF1E40AF));
ContainerBuilder bgSecondary() => backgroundColor(Color(0xFF7C3AED));
ContainerBuilder bgAccent() => backgroundColor(Color(0xFF059669));
}
// Usage
Text('Brand Button')
.asContainer()
.px6()
.py3()
.bgPrimary() // Custom brand color
.r8()
.build()
Custom Spacing
extension CustomSpacing on ContainerBuilder {
ContainerBuilder pSection() => padding(EdgeInsets.all(32));
ContainerBuilder pCard() => padding(EdgeInsets.all(16));
}
🤝 Contributing
We welcome contributions! Since this is a pre-1.0.0 package:
- Check Issues: Look for existing issues or create new ones
- Discuss Changes: For major changes, please discuss first
- Follow Patterns: Use the established builder pattern architecture
- Add Tests: Include tests for new functionality
- Update Docs: Update documentation for new features
🌟 Community
- 📖 Documentation: pub.dev/packages/tailwindcss_build
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Inspired by Tailwind CSS
- Built for the Flutter community
- Thanks to all contributors and users
Ready to revolutionize your Flutter development?
flutter pub add tailwindcss_build
Transform verbose Flutter code into elegant, maintainable, and performant UI declarations with TailwindCSS Build.