Idiomatic Flutter
Priority: P1 (OPERATIONAL)
Modern Flutter layout patterns and composition techniques.
- Async Gaps: Check
if (context.mounted)before usingBuildContextafterawait. - Composition: Extract complex UI into small widgets. Avoid deep nesting or large helper methods.
- Layout:
- Spacing: Use
Gap(n)orSizedBoxoverPaddingfor simple gaps. - Empty UI: Use
const SizedBox.shrink(). - Intrinsic: Avoid
IntrinsicWidth/Height; useStack+FractionallySizedBoxfor overlays.
- Spacing: Use
- Optimization: Use
ColoredBox/Padding/DecoratedBoxinstead ofContainerwhen possible. - Themes: Use extensions for
Theme.of(context)access.
Anti-Patterns
- ❌ No
if (context.mounted)afterawait— using BuildContext across async gaps causes crashes - ❌
Widget _buildHeader() { … }helper methods — extract to aconst StatelessWidgetfor proper rebuild control and DevTools profiling - ❌ Accessing a controller or state directly in a widget (
_controller.data) — use BLoC/Signals to decouple UI from state - ❌
Container(width: 0, height: 0)for empty space — useconst SizedBox.shrink()