Skip to content

hardy716/flutter_dsl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pub package

flutter_dsl

A declarative UI extension toolkit for Flutter, making your widget tree more expressive, readable, and concise.


✨ Features

  • 🔹 Fluent widget extension methods: .paddingAll(), .rounded(), .onTap(), etc.
  • 🔹 String-based Text() creation: 'Hello'.text(...)
  • 🔹 Theme-aware text styles: 'Title'.titleMedium(context)
  • 🔹 Conditional rendering: .visible(), .ifTrue(), .ifFalse()
  • 🔹 Declarative spacing: Spacing.square(16), .gapBottom(12)
  • 🔹 Designed to be chainable, intuitive, and Flutter-conventional

📦 Installation

Add to your pubspec.yaml:

dependencies:
  flutter_dsl: ^0.1.2+2

Then import it in your Dart files:

import 'package:flutter_dsl/flutter_dsl.dart';

🚀 Quick Usage

🔹 Widget DSL

Text('Login')
  .paddingAll(16)
  .rounded(12)
  .backgroundColor(Colors.blue)
  .center()
  .onTap(() => print('Tapped'));

🔹 Iterable Widget DSL

[
  Icon(Icons.star),
  'Favorite'.text(),
].row(spacing: 8);

[
  'Welcome'.headlineMedium(context),
  'Please log in'.text(),
].column(crossAxisAlignment: CrossAxisAlignment.start, spacing: 16);

[
  'A'.text().backgroundColor(Colors.red),
  'B'.text().backgroundColor(Colors.green).expanded(),
  'C'.text().backgroundColor(Colors.blue).flex(2),
].row();

🔹 String → Text DSL

'Welcome'
  .text(fontSize: 18, fontWeight: FontWeight.bold);

'Title'.titleMedium(context);
'Body'.bodyMedium(context);
'Caption'.labelSmall(context);

🔹 Conditional Rendering

'Error occurred'
  .text()
  .visible(hasError);

'Edit'
  .text()
  .ifTrue(isEditable, orElse: () => Icon(Icons.lock));

🔹 Spacing DSL

Spacing(w: 12);             // Horizontal spacing
Spacing(h: 16);             // Vertical spacing
Spacing.square(24);         // Equal width & height
Spacing.none();             // Empty SizedBox

🧪 Example

Check out the full working demo in: 📄 example/lib/main.dart

📌 Why flutter_dsl?

Flutter UI can be expressive, but often verbose. This package aims to: Reduce nesting and boilerplate Make UI code more readable Provide reusable and declarative patterns Stay consistent with Flutter's philosophy

🤝 Contributing

We welcome PRs and issues! Please open an issue or fork and create a PR.

📄 License

MIT License © 2025 HARDY

About

A declarative UI helper extension package for Flutter, making your widget tree more expressive and readable.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages