Why Clean Code Matters
Clean code isn't about showing off — it's about your future self (and teammates) being able to understand what you wrote 6 months later. Here are 10 Dart patterns I use daily.
1. Cascade Notation (..)
Instead of repeating the object reference, chain operations:
final controller = TextEditingController() ..text = 'Hello' ..selection = TextSelection.collapsed(offset: 5);
2. Collection If and For
Build lists conditionally without separate logic:
final items = [ 'Home', if (isLoggedIn) 'Profile', for (var page in extraPages) page, ];
3. Named Constructors
Make your intent clear with descriptive constructors instead of boolean flags.
4. Extension Methods
Add functionality to existing classes without inheritance. Perfect for String formatting, DateTime utilities, etc.
5. Sealed Classes (Dart 3)
Pattern matching with sealed classes eliminates runtime errors in state management. The compiler enforces exhaustive handling.
6. Records for Multiple Returns
Return multiple values without creating a class: (String name, int age) getUserInfo() => ('Aditya', 22);
7. Null-Aware Operators
Master ?., ??, ??=, and ?[] to handle nullability elegantly.
8. const Constructors
Use const wherever possible — it improves performance by enabling compile-time constants and widget reuse.
9. typedef for Function Types
Name your function signatures for readability: typedef OnUserTap = void Function(User user);
10. Enhanced Enums
Add methods, fields, and computed properties to enums for type-safe, self-documenting code.
Conclusion
These aren't groundbreaking tricks — they're small habits that compound into dramatically cleaner codebases. Start with one or two and build from there.